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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: splign_hitparser.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 18:12:58  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALGO_ALIGN_SPLIGN_HF_HITPARSER__HPP
  10. #define ALGO_ALIGN_SPLIGN_HF_HITPARSER__HPP
  11. /* $Id: splign_hitparser.hpp,v 1000.0 2004/06/01 18:12:58 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. *   Temporary code - will be included with the hit filtering library
  40. *
  41. */
  42. #include <algo/align/splign/splign_hit.hpp>
  43. BEGIN_NCBI_SCOPE
  44. class CHitParser  
  45. {
  46. public:
  47.     CHitParser();
  48.     CHitParser(const vector<CHit>& hits, int& GroupID);
  49.     virtual ~CHitParser();
  50.     void Init(const vector<CHit>& hits, int& GroupID);
  51.     enum EMode {
  52.       eMode_Combine,
  53.       eMode_GroupSelect,
  54.       eMode_Normal };
  55.  
  56.     int Run(EMode);
  57.     enum {
  58.       eMethod_MaxScore,
  59.       eMethod_MaxScore_GroupSelect
  60.     }
  61.     m_Method;
  62.     
  63.     enum { 
  64.       eSplitMode_MaxScore,
  65.       eSplitMode_Clear
  66.     }
  67.     m_SplitQuery, m_SplitSubject;
  68.     static int CalcCoverage(vector<CHit>::const_iterator ib,
  69.                             vector<CHit>::const_iterator ie,
  70.                             char where);
  71.     static int GetCollisionCount(int& query, int& subj, const vector<CHit>& hits);
  72.     size_t     GetSeqLength(const string& accession);
  73.     vector<CHit> m_Out;          // output vector
  74.     bool         m_SameOrder;    // true if hits in alignment must go
  75.                                  // in same order
  76.     enum {
  77.       eStrand_Plus = 0,
  78.       eStrand_Minus,
  79.       eStrand_Both,
  80.       eStrand_Auto
  81.     }
  82.     m_Strand;
  83.     // combine-proximity (max dist btw two hits suitable for combining)
  84.     double       m_CombinationProximity_pre;
  85.     double       m_CombinationProximity_post;
  86.     int          m_MaxHitDistQ; // max dist btw hits on query
  87.     int          m_MaxHitDistS; // max dist btw hits on subject
  88.     bool         m_Prot2Nucl;   // assume protein to nucleotide alignment
  89.     
  90.     enum EGroupIdentificationMethod {
  91.         eNone,
  92.         eQueryCoverage,
  93.         eSubjectCoverage
  94.     };
  95.     
  96.     EGroupIdentificationMethod   m_group_identification_method;
  97.     
  98.     
  99.     double       m_CovStep;             // min sensible coverage raise
  100.     double       m_MinQueryCoverage;    // min query coverage filter threshold
  101.     double       m_MinSubjCoverage;     // min subj coverage filter threshold
  102.     bool         m_OutputAllGroups;     // only max score groups otherwise
  103.     string       m_Query, m_Subj;  // accessions
  104. private:
  105.     int                     m_ange[4];      // global envelop
  106.     int                     m_Origin[2];  // leftmost point in original coordinates
  107.                                             // [0] - q, [1] - s
  108.     int*                    m_GroupID;
  109.     int                     m_ngid;
  110.     
  111.     map<string, size_t>     m_seqsizes;          //  sizes indexed by accession
  112.     void     x_Set2Defaults();
  113.     int      x_CheckParameters() const;
  114.     double   x_CalculateProximity(const CHit&, const CHit&) const;
  115.     void     x_GroupsIdentifyByCoverage(int Start, int Stop, int& GroupId,
  116.                                       double dCovCurrent, char where);
  117.     void     x_CalcGlobalEnvelop();
  118.     void     x_Combine(double dProximity); // search for close hits and combine them
  119.     int      x_RunMaxScore();  // max score
  120.     bool     x_RunAltSplitMode(char, CHit&, CHit&);
  121.     bool     x_DetectInclusion(const CHit& h1, const CHit& h2) const;
  122.     // max score group selection
  123.     int      x_RunMSGS(bool SelectGroupsOnly, int& GroupId);
  124.     void     x_TransformCoordinates(bool Dir);
  125.     void     x_IdentifyMaxDistGroups();
  126.     void     x_FilterByMaxDist();
  127.     void     x_SyncGroupsByMaxDist(int&);
  128.     void     x_FilterByOrder(size_t offset = 0, bool use_chainfilter = true);
  129.     size_t   x_RemoveEqual(); // removes equal hits from m_vOut
  130. };
  131. END_NCBI_SCOPE
  132. #endif