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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_psi.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 18:11:38  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALGO_BLAST_API__BLAST_PSI__HPP
  10. #define ALGO_BLAST_API__BLAST_PSI__HPP
  11. /*  $Id: blast_psi.hpp,v 1000.0 2004/06/01 18:11:38 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:  Christiam Camacho
  37.  *
  38.  */
  39. /** @file blast_psi.hpp
  40.  * C++ API for the PSI-BLAST PSSM generation engine.
  41.  *
  42.  * Notes:
  43.  * Variants of PSI-BLAST:
  44.  *     PSI-BLAST: protein/pssm vs. protein db/sequence
  45.  *     PSI-TBLASTN: protein/pssm vs. translated nucleotide db/sequence
  46.  *
  47.  * Binaries which run the variants mentioned above as implemented in C toolkit:
  48.  *     blastpgp runs PSI-BLAST (-j 1 = blastp; -j n, n>1 = PSI-BLAST)
  49.  *     blastall runs PSI-TBLASTN and it is only possible to run with a PSSM 
  50.  *     from checkpoint file via the -R option and for only one iteration.
  51.  *     PSI-TBLASTN cannot be run from just an iteration, it is always product
  52.  *     of a restart with a checkpoint file.
  53.  */
  54.  
  55. #include <corelib/ncbiobj.hpp>
  56. #include <corelib/ncbimisc.hpp>
  57. #include <algo/blast/core/blast_psi.h>
  58. #include <algo/blast/api/blast_exception.hpp>
  59. class CPssmCreate;   // forward declaration of unit test class
  60. BEGIN_NCBI_SCOPE
  61. BEGIN_SCOPE(objects)
  62.     class CScope;
  63.     class CSeq_loc;
  64.     class CScore;
  65.     class CDense_seg;
  66.     class CSeq_id;
  67.     class CSeq_align_set;
  68. END_SCOPE(objects)
  69. // specialization of CDeleter template for PsiAlignmentData structure
  70. // to be used when initializing an AutoPtr with the return value of
  71. // PsiAlignmentDataNew
  72. template <>
  73. struct CDeleter<PsiAlignmentData> {
  74.     static void Delete(PsiAlignmentData* p)
  75.     { PSIAlignmentDataFree(p); }
  76. };
  77. #ifndef GAP_IN_ALIGNMENT
  78. #   define GAP_IN_ALIGNMENT     ((Uint4)-1)
  79. #endif
  80. BEGIN_SCOPE(blast)
  81. class CScoreMatrixBuilder
  82. {
  83. public:
  84.     // C-tor
  85.     // @param query Query or Consensus sequence for the alignment. The data
  86.     // query points to is *not* copied.
  87.     CScoreMatrixBuilder(const Uint1* query,
  88.                         TSeqPos query_sz,
  89.                         CRef<objects::CSeq_align_set> sset,
  90.                         CRef<objects::CScope> scope,
  91.                         const PSIBlastOptions& opts);
  92.     // N.B.:
  93.     // Only two types of Seq-aligns are supported: those for protein-protein
  94.     // comparison (Dense-seg) and those for protein-translated nucleotide
  95.     // comparison (Std-seg).
  96.     // Dense-diag?
  97.     // FIXME: need to return Score-matrix ASN.1 structure with PSSM
  98.     void Run();
  99.     unsigned int GetNumAlignedSequences() const;
  100.     unsigned int GetQuerySeqLen() const;
  101. protected:
  102.     // Convenience for debugging
  103.     friend ostream& operator<<(ostream& out, const CScoreMatrixBuilder& smb);
  104.     void SelectSequencesForProcessing();
  105.     void ExtractAlignmentData();
  106.     /// Process each segment in the alignment to extract information about
  107.     /// matching letters, evalues, and extents of the matching regions
  108.     /// @param s abstraction of an aligned segment [in]
  109.     /// @param seq_index index of the sequence aligned with the query in the
  110.     ///        desc_matrix field of the m_AlignmentData data member [in]
  111.     /// @param e_value E-value for this subject alignment.
  112.     void x_ProcessDenseg(const objects::CDense_seg& denseg, TSeqPos seq_index,
  113.                          double e_value);
  114.     void x_Init(const Uint1* query, TSeqPos query_size, 
  115.                 CRef<objects::CSeq_align_set> sset);
  116.     /// Member function that selects those sequences in the alignment which
  117.     /// have an evalue lower than the threshold specified in PsiInfo structure
  118.     void x_SelectByEvalue();
  119.     /// Allow specification of seq-ids for considering sequences to process
  120.     void x_SelectBySeqId(const std::vector< CRef<objects::CSeq_id> >& ids);
  121. private:
  122.     // Convenience typedefs
  123.     typedef AutoPtr<PsiAlignmentData, CDeleter<PsiAlignmentData> > 
  124.         TPsiAlignDataSmartPtr;
  125.     typedef pair<AutoPtr<Uint1, ArrayDeleter<Uint1> >, TSeqPos> TSeqPair;
  126.     CRef<objects::CScope>           m_Scope;
  127.     TPsiAlignDataSmartPtr           m_AlignmentData;
  128.     PSIBlastOptions                 m_Opts;
  129.     CRef<objects::CSeq_align_set>   m_SeqAlignSet;
  130.     PsiInfo                         m_PssmDimensions;
  131.     /// Prohibit copy constructor
  132.     CScoreMatrixBuilder(const CScoreMatrixBuilder& rhs);
  133.     /// Prohibit assignment operator
  134.     CScoreMatrixBuilder& operator=(const CScoreMatrixBuilder& rhs);
  135.     friend class ::CPssmCreate; // unit test class
  136.     // Auxiliary functions
  137.     static TSeqPair 
  138.     x_GetSubjectSequence(const objects::CDense_seg& ds, objects::CScope& scope);
  139. };
  140. inline unsigned int
  141. CScoreMatrixBuilder::GetNumAlignedSequences() const
  142. {
  143.     return m_PssmDimensions.num_seqs;
  144. }
  145. inline unsigned int
  146. CScoreMatrixBuilder::GetQuerySeqLen() const
  147. {
  148.     return m_PssmDimensions.query_sz;
  149. }
  150. /// Used for debugging purposes
  151. std::string
  152. PsiAlignmentData2String(const PsiAlignmentData* alignment);
  153. END_SCOPE(blast)
  154. END_NCBI_SCOPE
  155. /*
  156.  * ===========================================================================
  157.  *
  158.  * $Log: blast_psi.hpp,v $
  159.  * Revision 1000.0  2004/06/01 18:11:38  gouriano
  160.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  161.  *
  162.  * Revision 1.2  2004/05/28 17:32:32  ucko
  163.  * Remove redundant ncbi:: from specialization of CDeleter, as it
  164.  * confuses some compilers.
  165.  *
  166.  * Revision 1.1  2004/05/28 16:39:42  camacho
  167.  * Initial revision
  168.  *
  169.  *
  170.  * ===========================================================================
  171.  */
  172. #endif  /* ALGO_BLAST_API__BLAST_PSI__HPP */