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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: alignment_smear.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:54:26  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OBJUTILS___ALIGNMENT_SMEAR__HPP
  10. #define GUI_OBJUTILS___ALIGNMENT_SMEAR__HPP
  11. /*  $Id: alignment_smear.hpp,v 1000.0 2004/06/01 19:54:26 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:  Robert G. Smith
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <gui/gui.hpp>
  43. #include <gui/objutils/density_map.hpp>
  44. /** @addtogroup GUI_OBJUTILS
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. template <typename T>
  50. struct max_func : public binary_function<T, T, T>
  51. {
  52.     T operator() (T a1, T a2) const {
  53.         return max(a1, a2);
  54.     };
  55. };
  56. /*
  57. class CAlignSmearSeg_CI {
  58. public:
  59.     typedef int     score_type;
  60.     
  61.     CAlignSmearSeg_CI(const CDenMapRunIterator<score_type>& dmr_it, const CDensityMap<score_type>& density);
  62.     
  63.     score_type  Advance();
  64.         
  65.     TSeqPos     GetPosition() const { return m_DMR_it.GetPosition() * m_Window + m_Start; }
  66.     TSeqPos     GetLength() const{ return m_DMR_it.GetRunLength() * m_Window; }
  67.     score_type  GetValue() const { return m_DMR_it.GetValue(); }
  68.         
  69.     operator bool() const { return m_DMR_it.Valid(); }
  70. private:    
  71.     CDenMapRunIterator<score_type>      m_DMR_it;
  72.     TSeqPos                 m_Start;
  73.     TSeqPos                 m_Window;
  74.     
  75. };
  76. class CAlignSmearGap_CI {
  77. public:
  78.     typedef int     score_type;
  79.     
  80.     CAlignSmearGap_CI(const CDenMapRunIterator<score_type>& dmr_it, const CDensityMap<score_type, max_func<score_type> >& density);
  81.     
  82.     void        Advance();
  83.         
  84.     TSeqPos     GetPosition() const { return m_DMR_it.GetPosition() * m_Window + m_Start; }
  85.     TSeqPos     GetLength() const{ return m_DMR_it.GetRunLength() * m_Window; }
  86.         
  87.     operator bool() const { return m_DMR_it.Valid(); }
  88. private:    
  89.     CDensityMap<score_type, max_func<score_type> >      m_DMR_it;
  90.     TSeqPos                 m_Start;
  91.     TSeqPos                 m_Window;
  92.     
  93. };
  94. */
  95. class objects::CBioseq_Handle;
  96. class objects::CAlnMap;
  97. class objects::CSeq_annot;
  98. struct objects::SAnnotSelector;
  99. class NCBI_GUIOBJUTILS_EXPORT CAlignmentSmear : public CObject {
  100. public:
  101.     enum EAlignSmearStrand {
  102.         eSmearStrand_Both,
  103.         eSmearStrand_Pos,
  104.         eSmearStrand_Neg
  105.     };
  106.     typedef int     score_type;
  107.     typedef CDenMapRunIterator<score_type>  runlen_iterator;
  108.     
  109.     CAlignmentSmear(
  110.         const objects::CBioseq_Handle& handle, 
  111.         TSeqPos start, 
  112.         TSeqPos stop, 
  113.         TSeqPos window = 1,
  114.         EAlignSmearStrand strand_type = eSmearStrand_Both
  115.         );
  116. /// INPUT:
  117.     /// smear all the alignments in this annotation.
  118.     void    AddAnnot(const objects::CSeq_annot& seq_annot);
  119.     /// Smear all the alignments matchec by this selector on my bioseq.
  120.     void    AddAlignments(const objects::SAnnotSelector& sel);
  121.     
  122.     /// Add this one alignment to my smear.    
  123.     void    AddAlignment(objects::CAlnMap& align);
  124.     void MaskGaps();
  125.     
  126.     string      GetLabel() const;
  127.     void        SetLabel(const string& label);
  128.     
  129.     EAlignSmearStrand   GetStrandType() const { return m_StrandType; }
  130.     
  131.     static bool SeparateStrands(const objects::CSeq_annot& seq_annot);
  132.     
  133. /// OUTPUT:
  134.     runlen_iterator  SmearSegBegin() const 
  135.         { return m_AccumSeg.RunLenBegin(); }
  136.     runlen_iterator  SmearGapBegin() const
  137.         { return m_AccumGap.RunLenBegin(); }
  138.     score_type         GetMaxValue() const { return m_AccumSeg.GetMax(); }
  139. private:
  140.     static string   x_GetAnnotName(const objects::CSeq_annot& seq_annot);
  141.     const objects::CBioseq_Handle&  m_BioseqHandle;
  142.     
  143.     typedef CDensityMap<score_type> TSegMap;
  144.     TSegMap     m_AccumSeg;
  145.     
  146.     typedef CDensityMap<score_type, max_func<score_type> >  TGapMap;
  147.     TGapMap     m_AccumGap;
  148.     EAlignSmearStrand   m_StrandType;
  149.     string      m_Label;
  150. };
  151. END_NCBI_SCOPE
  152. /* @} */
  153. /*
  154.  * ===========================================================================
  155.  * $Log: alignment_smear.hpp,v $
  156.  * Revision 1000.0  2004/06/01 19:54:26  gouriano
  157.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  158.  *
  159.  * Revision 1.3  2004/05/03 13:34:53  dicuccio
  160.  * FIxed include guards, doxygen groups
  161.  *
  162.  * Revision 1.2  2004/05/03 12:41:35  dicuccio
  163.  * Fixed #includes and export specifiers
  164.  *
  165.  * Revision 1.1  2004/04/30 11:52:52  dicuccio
  166.  * Split out from gui/utils
  167.  *
  168.  * Revision 1.4  2004/04/16 14:27:17  dicuccio
  169.  * Added doxygen module tag
  170.  *
  171.  * Revision 1.3  2004/03/23 13:34:39  dicuccio
  172.  * Added export specifiers.  Changed predeclaration from class -> struct to match
  173.  * actual definition
  174.  *
  175.  * Revision 1.2  2004/03/22 18:40:10  ucko
  176.  * Fix forward declaration of SAnnotSelector to contain "class".
  177.  *
  178.  * Revision 1.1  2004/03/22 16:35:34  rsmith
  179.  * initial checkin
  180.  *
  181.  *
  182.  * ===========================================================================
  183.  */
  184. #endif  // GUI_OBJUTILS___ALIGNMENT_SMEAR__HPP