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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: mate_pair.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:55:32  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OBJUTILS___MATE_PAIR__HPP
  10. #define GUI_OBJUTILS___MATE_PAIR__HPP
  11. /*  $Id: mate_pair.hpp,v 1000.0 2004/06/01 19:55:32 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:  Vlad Lebedev
  37.  *
  38.  * File Description:
  39.  *   CLayoutMatePair -- utility class to layout mate pairs (a special type of
  40.  *      pairwise alignments and hold a set of CLayoutPWAlign
  41.  */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/gui.hpp>
  44. #include <gui/objutils/layout.hpp>
  45. #include <gui/objutils/pw_alignment.hpp>
  46. #include <objects/seqalign/Seq_align.hpp>
  47. /** @addtogroup GUI_OBJUTILS
  48.  *
  49.  * @{
  50.  */
  51. BEGIN_NCBI_SCOPE
  52. class NCBI_GUIOBJUTILS_EXPORT CLayoutMatePair : public CLayoutObject
  53. {
  54. public:
  55.     typedef vector< CRef<CLayoutPWAlign> > TAlignList;
  56.     
  57.     // ctors
  58.     CLayoutMatePair(const TAlignList& aligns);
  59.     // Access the alignment as a CObject
  60.     const CObject* GetObject(TSeqPos pos) const;
  61.     bool HasObject(const CObject* obj) const;
  62.     bool IsSelected(const CLayoutPWAlign* pw_aln) const;
  63.     
  64.     // Access the alignments's remapped location
  65.     const objects::CSeq_loc& GetLocation(void) const;
  66.     const TAlignList&        GetSeqAligns() const;
  67.     // retrieve the type of this object
  68.     EType GetType() const;
  69.     // matepair specifics
  70.     // library information
  71.     enum ELibraryId {
  72.         eLibrary_NotSet = -1,
  73.         eLibrary_NotFound = 0
  74.     };
  75.     size_t GetLibraryId() const;
  76.     // matepair errors
  77.     enum EErrorType {
  78.         // no error found (initial state)
  79.         eError_NotSet = -1,
  80.         // no error
  81.         eError_NoError = 0,
  82.         // the mate is not aligned with the correct otientation
  83.         eError_Orientation = 1,
  84.         // the mate aligns to multiple locations
  85.         eError_NonUnique = 2,
  86.         // the mate is not in the expected distance range
  87.         eError_Distance = 3
  88.     };
  89.     EErrorType GetError() const;
  90.     //
  91.     // pure virtual requirements
  92.     //    
  93.     // Comparators
  94.     bool LessByPos (const CLayoutObject& obj) const;
  95.     bool LessBySize(const CLayoutObject& obj) const;
  96. protected:
  97.     TAlignList              m_SeqAligns;
  98.     CRef<objects::CSeq_loc> m_Location;
  99.     // parsed matepair library (-1 = not set, 0 = not found)
  100.     int m_LibraryId;
  101.     // parsed mate pair error code
  102.     EErrorType m_ErrorType;
  103.     
  104.     // store the selected object (if any)
  105.     mutable vector<const CObject*> m_ObjSel;
  106. };
  107. inline
  108. bool CLayoutMatePair::LessByPos(const CLayoutObject& obj) const
  109. {
  110.     TSeqRange r0 = GetLocation().GetTotalRange();
  111.     TSeqRange r1 = obj.GetLocation().GetTotalRange();
  112.     return (r0.GetFrom() < r1.GetFrom());
  113. }
  114. inline
  115. bool CLayoutMatePair::LessBySize(const CLayoutObject& obj) const
  116. {
  117.     TSeqRange r0 = GetLocation().GetTotalRange();
  118.     TSeqRange r1 = obj.GetLocation().GetTotalRange();
  119.     return (r0.GetLength() < r1.GetLength());
  120. }
  121. inline
  122. bool CLayoutMatePair::HasObject(const CObject* obj) const
  123. {
  124.     ITERATE(TAlignList, iter, m_SeqAligns)
  125.     {
  126.         if ( (*iter)->HasObject(obj) ) {
  127.             m_ObjSel.push_back(obj);
  128.             return true;
  129.         }
  130.     }
  131.     return false;
  132. }
  133. inline
  134. bool CLayoutMatePair::IsSelected(const CLayoutPWAlign* pw_aln) const
  135. {
  136.     ITERATE(vector<const CObject*>, iter, m_ObjSel) {
  137.         if (pw_aln->HasObject(*iter))
  138.             return true;
  139.     }
  140.     return false;
  141. }
  142.             
  143. inline
  144. const CLayoutMatePair::TAlignList&
  145. CLayoutMatePair::GetSeqAligns(void) const
  146. {
  147.     return m_SeqAligns;
  148. }
  149. inline
  150. const objects::CSeq_loc& CLayoutMatePair::GetLocation(void) const
  151. {
  152.     return *m_Location;
  153. }
  154. inline
  155. size_t CLayoutMatePair::GetLibraryId() const
  156. {
  157.     return m_LibraryId;
  158. }
  159. inline
  160. CLayoutMatePair::EErrorType CLayoutMatePair::GetError() const
  161. {
  162.     return m_ErrorType;
  163. }
  164. inline
  165. CLayoutMatePair::EType CLayoutMatePair::GetType() const
  166. {
  167.     return eMatepair;
  168. }
  169. END_NCBI_SCOPE
  170. /* @} */
  171. /*
  172.  * ===========================================================================
  173.  * $Log: mate_pair.hpp,v $
  174.  * Revision 1000.0  2004/06/01 19:55:32  gouriano
  175.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.5
  176.  *
  177.  * Revision 1.5  2004/05/14 14:24:47  dicuccio
  178.  * Added new pure virtual requirement on CLayoutObject(): GetType(), returns enum
  179.  * defined in CLayoutObject
  180.  *
  181.  * Revision 1.4  2004/05/10 18:24:29  dicuccio
  182.  * Added identification of mate pair library and error codes
  183.  *
  184.  * Revision 1.3  2004/05/03 13:34:54  dicuccio
  185.  * FIxed include guards, doxygen groups
  186.  *
  187.  * Revision 1.2  2004/05/03 12:41:35  dicuccio
  188.  * Fixed #includes and export specifiers
  189.  *
  190.  * Revision 1.1  2004/04/30 11:52:53  dicuccio
  191.  * Split out from gui/utils
  192.  *
  193.  * Revision 1.6  2004/04/20 19:15:04  dicuccio
  194.  * Converted to store a set of pairwise alignments
  195.  *
  196.  * Revision 1.5  2004/04/16 14:27:17  dicuccio
  197.  * Added doxygen module tag
  198.  *
  199.  * Revision 1.4  2004/04/15 12:57:43  lebedev
  200.  * Changed GetObject to return NULL or const pointer based on given position
  201.  *
  202.  * Revision 1.3  2004/04/12 16:49:02  dicuccio
  203.  * Redesign CLayoutMatePair - use alignment manager internally, store a set of
  204.  * alignments
  205.  *
  206.  * Revision 1.2  2004/04/07 12:39:09  dicuccio
  207.  * Formatting changes
  208.  *
  209.  * Revision 1.1  2004/04/05 16:10:06  lebedev
  210.  * Initial revision
  211.  *
  212.  * ===========================================================================
  213.  */
  214. #endif  // GUI_OBJUTILS___MATE_PAIR__HPP