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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: splign.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 18:11:18  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALGO_ALIGN_SPLIGN__HPP
  10. #define ALGO_ALIGN_SPLIGN__HPP
  11. /* $Id: splign.hpp,v 1000.0 2004/06/01 18:11:18 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:  Yuri Kapustin
  37. *
  38. * File Description:
  39. *   CSplign class definition
  40. *
  41. */
  42. #include <corelib/ncbistd.hpp>
  43. #include <algo/align/nw_spliced_aligner.hpp>
  44. #include <algo/align/splign/splign_hit.hpp>
  45. BEGIN_NCBI_SCOPE
  46. // Abstract base for splign sequence accessors
  47. class NCBI_XALGOALIGN_EXPORT CSplignSeqAccessor: public CObject
  48. {
  49. public:
  50.     // start and finish are zero-based;
  51.     // must return full sequence when start == 0 and finish == kMax_UInt;
  52.     // sequence characters are expected to be in upper case.
  53.     virtual void Load(const string& id, vector<char> *seq,
  54.                       size_t start, size_t finish) = 0;
  55. };
  56. class NCBI_XALGOALIGN_EXPORT CSplign: public CObject
  57. {
  58. public:
  59.     // a segment can represent an exon or an unaligning piece of mRna (a gap)
  60.     struct SSegment {
  61.         bool   m_exon; // false if gap
  62.         double m_idty;
  63.         size_t m_len;
  64.         size_t m_box [4];
  65.         string m_annot;   // short description like AG<exon>GT
  66.         string m_details; // transcript for exons, '-' for gaps
  67.         void ImproveFromLeft( const char* seq1, const char* seq2 );
  68.         void ImproveFromRight( const char* seq1, const char* seq2 );
  69.         void RestoreIdentity(void);
  70.         const char* GetDonor(void) const;    // raw pointers to parts of annot
  71.         const char* GetAcceptor(void) const; // or zero if less than 2 chars
  72.     };
  73.     typedef vector<SSegment> TSegments;
  74.     // aligned compartment representation 
  75.     struct SAlignedCompartment {
  76.         SAlignedCompartment(void): m_id(0), m_error(true) {}
  77.         SAlignedCompartment(size_t id, bool err, const char* msg):
  78.             m_id(id), m_error(err), m_msg(msg) {}
  79.     
  80.         size_t           m_id;
  81.         TSegments        m_segments;
  82.         size_t           m_mrnasize;
  83.         bool             m_QueryStrand, m_SubjStrand;
  84.         size_t           m_qmin, m_smin, m_smax;
  85.         bool             m_error;
  86.         string           m_msg;
  87.     };
  88.     typedef vector<CHit> THits;
  89.     typedef vector<SAlignedCompartment> TResults;
  90. public:
  91.     CSplign(void);
  92.     // setters and getters
  93.     void   SetAligner( CRef<CSplicedAligner>& aligner);
  94.     const  CRef<CSplicedAligner>& GetAligner(void) const;
  95.     void   SetSeqAccessor(CRef<CSplignSeqAccessor>& sa);
  96.     const  CRef<CSplignSeqAccessor>& GetSeqAccessor(void) const;
  97.     void   SetEndGapDetection(bool on);
  98.     bool   GetEndGapDetection(void) const;
  99.     void   SetPolyaDetection(bool on);
  100.     bool   GetPolyaDetection(void) const;
  101.     void   SetStrand(bool strand);
  102.     bool   GetStrand(void) const;
  103.     void   SetMaxGenomicExtension(size_t ext);
  104.     size_t GetMaxGenomicExtension(void) const;
  105.     void   SetMinQueryCoverage(double cov);
  106.     double GetMinQueryCoverage(void) const;
  107.     void   SetCompartmentPenalty(double penalty);
  108.     double GetCompartmentPenalty(void) const; 
  109.     void   SetMinExonIdentity(double idty);
  110.     double GetMinExonIdentity(void) const;
  111.     void   SetStartModelId(size_t model_id) {
  112.         m_model_id = model_id - 1;
  113.     }
  114.     void Run(THits* hits);
  115.   
  116.     const TResults& GetResult(void) const {
  117.         return m_result;
  118.     }
  119. protected:
  120.     // active ingridient :-)
  121.     CRef<CSplicedAligner> m_aligner;
  122.     // access to sequence data
  123.     CRef<CSplignSeqAccessor> m_sa;
  124.     // alignment pattern
  125.     vector<size_t> m_pattern;
  126.     // min exon idty - others will be marked as gaps
  127.     double m_minidty;
  128.     // compartment penalty as a per cent of the query (mRna) length
  129.     double m_compartment_penalty;
  130.     // mandatory end gap detection flag
  131.     bool m_endgaps;
  132.     // min query hit coverage
  133.     double m_min_query_coverage;
  134.     // alignment map
  135.     struct SAlnMapElem {
  136.         size_t m_box [4];
  137.         int    m_pattern_start, m_pattern_end;
  138.     };
  139.     vector<SAlnMapElem> m_alnmap;
  140.     // query sequence
  141.     vector<char> m_mrna;
  142.     bool         m_strand;
  143.     size_t       m_polya_start;
  144.     bool         m_nopolya;
  145.     // genomic sequence
  146.     vector<char> m_genomic;
  147.     // max space to look beyond end hits
  148.     size_t       m_max_genomic_ext;
  149.     // output per compartment
  150.     TSegments    m_segments;
  151.   
  152.     // all compartments
  153.     size_t       m_model_id;
  154.     TResults     m_result;
  155.     SAlignedCompartment x_RunOnCompartment( THits* hits,
  156.                                             size_t range_left,
  157.                                             size_t range_right );
  158.     void   x_Run(const char* seq1, const char* seq2);
  159.     size_t x_TestPolyA(void);
  160.     void   x_SetPattern(THits* hits);
  161. };
  162. END_NCBI_SCOPE
  163. /*
  164.  * ===========================================================================
  165.  *
  166.  * $Log: splign.hpp,v $
  167.  * Revision 1000.0  2004/06/01 18:11:18  gouriano
  168.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.10
  169.  *
  170.  * Revision 1.10  2004/05/04 15:23:44  ucko
  171.  * Split splign code out of xalgoalign into new xalgosplign.
  172.  *
  173.  * Revision 1.9  2004/05/03 15:22:18  johnson
  174.  * added typedefs for public stl types
  175.  *
  176.  * Revision 1.8  2004/04/30 15:00:32  kapustin
  177.  * Support ASN formatting
  178.  *
  179.  * Revision 1.7  2004/04/27 17:19:43  kapustin
  180.  * Valuble comments added
  181.  *
  182.  * Revision 1.6  2004/04/26 15:38:25  kapustin
  183.  * Add model_id as a class member
  184.  *
  185.  * Revision 1.5  2004/04/23 14:36:24  kapustin
  186.  * Initial revision
  187.  *
  188.  *
  189.  * ===========================================================================
  190.  */
  191. #endif