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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: aln_scoring.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 18:15:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_ALN_MULTIPLE___ALN_SCORING__HPP
  10. #define GUI_WIDGETS_ALN_MULTIPLE___ALN_SCORING__HPP
  11. /*  $Id: aln_scoring.hpp,v 1000.2 2004/04/12 18:15:46 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.  * Authors:  Andrey Yazhuk
  37.  *
  38.  */
  39. #include <corelib/ncbistd.hpp>
  40. #include <corelib/ncbistl.hpp>
  41. #include <gui/opengl/glcolor.hpp>
  42. #include <gui/widgets/aln_multiple/attr_range_coll.hpp>
  43. #include <objtools/alnmgr/alnvec.hpp>
  44. BEGIN_NCBI_SCOPE
  45. /// IScoringMethod represents an abstract algorithm for calculating alignment
  46. /// scores and assigning colors.
  47. class IScoringMethod
  48. {
  49. public:
  50.     typedef float   TScore;
  51.     typedef vector<TScore>  TScoreVector;
  52.     virtual ~IScoringMethod()   {};
  53.     /// returns unique name of the method that can be used in UI to identify it
  54.     virtual string  GetName() = 0;
  55.     /// calculates scores for a column
  56.     virtual void    CalculateScores(char cons, const string& column, 
  57.                             TScore& col_score, TScoreVector& scores) = 0;    
  58.     /// returns a color corresponding to a given score value. It  is recommended
  59.     /// that this method be implemented using color table, on-the-fly creation
  60.     /// of colors is expensive.
  61.     virtual const CGlColor& GetColorForScore(TScore score) const = 0;
  62. };
  63. /// CSimpleScoringMethod - trivial implementation of IScoringMethod.
  64. ///
  65. /// Scores are calculated as frequences of symbols normalized to fit in range
  66. /// [0, 1]. CreateColorTable() must be called once before any GetColorForScore()
  67. /// cals.
  68. class CSimpleScoringMethod : public IScoringMethod
  69. {
  70. public:
  71.     enum    EOptions    {
  72.         //fAnchorAsConsensus  = 0x01,
  73.         fIgnoreEmptySpace   = 0x02,
  74.         fIgnoreGaps         = 0x04
  75.     };
  76.     CSimpleScoringMethod();
  77.     virtual ~CSimpleScoringMethod();
  78.     void    SetOptions(int options); // takes as argument combination of EOptions flags
  79.     void    CreateColorTable(int size);
  80.     virtual string  GetName();
  81.     virtual void    CalculateScores(char cons, const string& column,
  82.                              TScore& col_score, TScoreVector& scores);
  83.     virtual const CGlColor& GetColorForScore(TScore score) const;
  84. protected:
  85.     int m_Options; /// combination of EOptions flags
  86.     vector<CGlColor>    m_vColors;
  87.     vector<int>     m_vCharCounts; /// histogramm of characters
  88.     char    m_Space;
  89.     char    m_Gap;
  90. };
  91. class CSNPScoringMethod : public CSimpleScoringMethod
  92. {
  93. public:
  94.     virtual string  GetName();
  95.     virtual void    CalculateScores(char cons, const string& column,
  96.                                     TScore& col_score, TScoreVector& scores);
  97. };
  98. /// CScoreCache class uses given scoring method to calculate scores for
  99. /// CAlnVec-type alignment. CScoreCache stores scores in compressed form
  100. /// as CAttrRangeCollection. To make fetching of sequence and calculation
  101. /// of scores more effective CScoreCache uses sequence buffer.
  102. class CScoreCache
  103. {
  104. public:
  105.     typedef objects::CAlnVec::TNumrow    TNumrow;
  106.     typedef IScoringMethod::TScore  TScore;
  107.     typedef IScoringMethod::TScoreVector  TScoreVector;
  108.     typedef CAttrRangeCollection<TScore, TSeqPos>   TScoreColl;
  109.     CScoreCache();
  110.     
  111.     /// Sets the number of score gradations.
  112.     void    SetGradNumber(int grad_n);
  113.     
  114.     void    SetScoringMethod(IScoringMethod *method);
  115.     IScoringMethod*    GetScoringMethod();
  116.     const IScoringMethod*    GetScoringMethod() const;
  117.     void    SetAlnVec(const objects::CAlnVec* aln_vec);    
  118.     void    CalculateScores();
  119.     
  120.     const TScoreColl&   GetScores(TNumrow row) const;
  121.     const CGlColor&     GetColorForScore(TScore score) const;
  122.     
  123. protected:
  124.     // Sequence buffer routins.
  125.     char x_BufferGetSeq(TSeqPos pos, TNumrow row) const;
  126.     void x_BufferGetColumn(TSeqPos pos, string& column) const;
  127.     void x_AllocBuffer(TSeqPos row_len);
  128.     void x_FreeBuffer(); 
  129.     /// Fetches sequence from CAlnVec.
  130.     void x_UpdateBuffer(TSeqPos start, TSeqPos stop); 
  131.     
  132.     TSeqPos x_GetStart() const;
  133.     TSeqPos x_GetStop() const;
  134.     TSeqPos x_GetRowLength() const;
  135. protected:
  136.     typedef vector<TScoreColl>  TScoreCollVector;
  137.     TScoreCollVector    m_vScoreColls; /// score storage
  138.     const objects::CAlnVec*      m_pAlnVec;
  139.     IScoringMethod*     m_pMethod;
  140.     int     m_GradNumber;
  141.     /// Sequence buffer data members. 
  142.     vector<string> m_vRows;    
  143.     TSeqPos m_BufferStart; /// Aln position corresponding to the first column of the buffer
  144.     TSeqPos m_RowLength;   /// buffer row length
  145. };
  146. inline const CGlColor& CScoreCache::GetColorForScore(TScore score) const
  147. {
  148.     return m_pMethod->GetColorForScore(score);        
  149. }
  150. END_NCBI_SCOPE
  151. /*
  152.  * ===========================================================================
  153.  * $Log: aln_scoring.hpp,v $
  154.  * Revision 1000.2  2004/04/12 18:15:46  gouriano
  155.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  156.  *
  157.  * Revision 1.6  2004/04/02 16:37:39  yazhuk
  158.  * Added to CSimpleScoringMethod options for ignoring empty space and gaps;
  159.  * Added CSNPScoringMethod .
  160.  *
  161.  * Revision 1.5  2004/03/18 17:08:50  yazhuk
  162.  * Added GetScoringMethod()
  163.  *
  164.  * Revision 1.4  2004/02/11 17:42:30  yazhuk
  165.  * Added GetName() to IScoringMethod interface; added comments
  166.  *
  167.  * Revision 1.3  2003/11/06 20:01:09  dicuccio
  168.  * Removed USING_SCOPE(objects)
  169.  *
  170.  * Revision 1.2  2003/10/29 23:25:33  yazhuk
  171.  * Changed comments
  172.  *
  173.  * Revision 1.1  2003/10/10 19:03:53  yazhuk
  174.  * Initial revision
  175.  *
  176.  * ===========================================================================
  177.  */
  178. #endif  // GUI_WIDGETS_ALN_MULTIPLE___ALN_SCORING__HPP