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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: multiseq_src.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 17:53:03  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALGO_BLAST_API___MULTISEQ_SRC__HPP
  10. #define ALGO_BLAST_API___MULTISEQ_SRC__HPP
  11. /*  $Id: multiseq_src.hpp,v 1000.0 2004/04/12 17:53:03 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:  Ilya Dondoshansky
  37. *
  38. */
  39. /// @file multiseq_src.hpp
  40. /// Implementation of the BlastSeqSrc interface for a vector of sequence 
  41. /// locations.
  42. #include <algo/blast/core/blast_seqsrc.h>
  43. #include <algo/blast/core/blast_def.h>
  44. #include <algo/blast/core/blast_message.h>
  45. #include <algo/blast/api/blast_types.hpp>
  46. /** @addtogroup AlgoBlast
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. BEGIN_SCOPE(blast)
  52. /// Encapsulates the arguments needed to initialize multi-sequence source.
  53. struct SMultiSeqSrcNewArgs {
  54.     TSeqLocVector seq_vector;
  55.     EProgram program;
  56. };
  57. /// Contains information about all sequences in a set.
  58. class CMultiSeqInfo : public CObject 
  59. {
  60. public: 
  61.     /// Constructor from a vector of sequence location/scope pairs and a 
  62.     /// BLAST program type.
  63.     CMultiSeqInfo(const TSeqLocVector& seq_vector, EProgram program);
  64.     ~CMultiSeqInfo();
  65.     /// Setter and getter functions for the private fields
  66.     Uint4 GetMaxLength();
  67.     void SetMaxLength(Uint4 val);
  68.     Uint4 GetAvgLength();
  69.     void SetAvgLength(Uint4 val);
  70.     bool GetIsProtein();
  71.     Uint4 GetNumSeqs();
  72.     BLAST_SequenceBlk* GetSeqBlk(int index);
  73.     void* GetSeqId(int index);
  74.     void* GetSeqLoc(int index);
  75.     Blast_Message* GetErrorMessage();
  76. private:
  77.     /// Passed from outside - not owned:
  78.     TSeqLocVector m_vSeqVector; ///< Vector of sequence locations
  79.     /// Internal fields
  80.     bool m_ibIsProt; ///< Are these sequences protein or nucleotide? 
  81.     vector<BLAST_SequenceBlk*> m_ivSeqBlkVec; ///< Vector of sequence blocks
  82.     unsigned int m_iMaxLength; ///< Length of the longest sequence in this set
  83.     unsigned int m_iAvgLength; ///< Average length of sequences in this set
  84.     Blast_Message* m_icErrMsg; ///< Error message in case of set up failure
  85. };
  86. inline Uint4 CMultiSeqInfo::GetMaxLength()
  87. {
  88.     return m_iMaxLength;
  89. }
  90. inline void CMultiSeqInfo::SetMaxLength(Uint4 length)
  91. {
  92.     m_iMaxLength = length;
  93. }
  94. inline Uint4 CMultiSeqInfo::GetAvgLength()
  95. {
  96.     return m_iAvgLength;
  97. }
  98. inline void CMultiSeqInfo::SetAvgLength(Uint4 length)
  99. {
  100.     m_iAvgLength = length;
  101. }
  102. inline bool CMultiSeqInfo::GetIsProtein()
  103. {
  104.     return m_ibIsProt;
  105. }
  106. inline Uint4 CMultiSeqInfo::GetNumSeqs()
  107. {
  108.     return m_ivSeqBlkVec.size();
  109. }
  110. inline BLAST_SequenceBlk* CMultiSeqInfo::GetSeqBlk(int index)
  111. {
  112.     return m_ivSeqBlkVec[index];
  113. }
  114. inline Blast_Message* CMultiSeqInfo::GetErrorMessage()
  115. {
  116.     return m_icErrMsg;
  117. }
  118. /// The following 2 functions interact with the C API, and have to be 
  119. /// declared extern "C".
  120. extern "C" {
  121. /** Multi-sequence source constructor 
  122.  * @param seq_src BlastSeqSrc structure (already allocated) to populate [in]
  123.  * @param args Pointer to MultiSeqSrcNewArgs structure above [in]
  124.  * @return Updated bssp structure (with all function pointers initialized
  125.  */
  126. BlastSeqSrc* MultiSeqSrcNew(BlastSeqSrc* seq_src, void* args);
  127. /** Multi sequence source destructor: frees its internal data structure and the
  128.  * BlastSeqSrc structure itself.
  129.  * @param seq_src BlastSeqSrc structure to free [in]
  130.  * @return NULL
  131.  */
  132. BlastSeqSrc* MultiSeqSrcFree(BlastSeqSrc* seq_src);
  133. } // extern "C"
  134. /** Initialize the sequence source structure.
  135.  * @param seq_vector Vector of sequence locations [in]
  136.  * @param program Type of BLAST to be performed [in]
  137.  * @bug There is no guarantee that error_msg->code maps to a 
  138.  * CBlastException error code, this could be meaningless
  139.  * @sa FIXME usage of calloc
  140.  */
  141. BlastSeqSrc* 
  142. MultiSeqSrcInit(const TSeqLocVector& seq_vector, EProgram program);
  143. END_SCOPE(blast)
  144. END_NCBI_SCOPE
  145. /* @} */
  146. /*
  147.  * ===========================================================================
  148.  * $Log: multiseq_src.hpp,v $
  149.  * Revision 1000.0  2004/04/12 17:53:03  gouriano
  150.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.6
  151.  *
  152.  * Revision 1.6  2004/03/25 17:18:28  camacho
  153.  * typedef not needed for C++ structs
  154.  *
  155.  * Revision 1.5  2004/03/23 14:14:12  camacho
  156.  * Moved comment from source file to header
  157.  *
  158.  * Revision 1.4  2004/03/19 18:56:48  camacho
  159.  * Change class & structure names to follow C++ toolkit conventions
  160.  *
  161.  * Revision 1.3  2004/03/15 22:34:50  dondosha
  162.  * Added extern "C" for 2 functions to eliminate Sun compiler warnings
  163.  *
  164.  * Revision 1.2  2004/03/15 18:34:19  dondosha
  165.  * Made doxygen comments and top #ifndef adhere to toolkit standard
  166.  *
  167.  * ===========================================================================
  168.  */
  169. #endif /* ALGO_BLAST_API___MULTISEQ_SRC__HPP */