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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_setup.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:05:55  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.21
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: blast_setup.hpp,v 1000.2 2004/06/01 18:05:55 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Christiam Camacho
  35.  *
  36.  */
  37. /** @file blast_setup.hpp
  38.  * Auxiliary setup functions for Blast objects interface
  39.  */
  40. #ifndef ALGO_BLAST_API___BLAST_SETUP__HPP
  41. #define ALGO_BLAST_API___BLAST_SETUP__HPP
  42. #include <algo/blast/api/blast_types.hpp>
  43. #include <algo/blast/api/blast_aux.hpp>
  44. #include <algo/blast/core/blast_options.h>
  45. #include <algo/blast/api/blast_exception.hpp>
  46. BEGIN_NCBI_SCOPE
  47. BEGIN_SCOPE(objects)
  48.     class CSeq_loc;
  49.     class CScope;
  50. END_SCOPE(objects)
  51. BEGIN_SCOPE(blast)
  52. class CBlastOptions;
  53. void
  54. SetupQueryInfo(const TSeqLocVector& queries, const CBlastOptions& options, 
  55.                BlastQueryInfo** qinfo); // out
  56. void
  57. SetupQueries(const TSeqLocVector& queries, const CBlastOptions& options,
  58.              const CBlastQueryInfo& qinfo, BLAST_SequenceBlk** seqblk);
  59. void
  60. SetupSubjects(const TSeqLocVector& subjects, 
  61.               EProgram program,
  62.               vector<BLAST_SequenceBlk*>* seqblk_vec, 
  63.               unsigned int* max_subjlen);
  64. /// Allows specification of whether sentinel bytes should be used or not
  65. enum ESentinelType {
  66.     eSentinels,
  67.     eNoSentinels
  68. };
  69. /** Retrieves a sequence using the object manager
  70.  * @param sl seqloc of the sequence to obtain [in]
  71.  * @param encoding encoding for the sequence retrieved.
  72.  *        Supported encodings include: NCBI2NA_ENCODING, NCBI4NA_ENCODING,
  73.  *        BLASTNA_ENCODING, and BLASTP_ENCODING. [in]
  74.  * @param scope Scope from which the sequences are retrieved [in]
  75.  * @param strand strand to retrieve (applies to nucleotide only).
  76.  *        N.B.: When requesting the NCBI2NA_ENCODING, only the plus strand
  77.  *        is retrieved, because BLAST only requires one strand on the subject
  78.  *        sequences (as in BLAST databases). [in]
  79.  * @param sentinel Use eSentinels to guard nucleotide sequence with sentinel 
  80.  *        bytes (ignored for protein sequences, which always have sentinels) 
  81.  *        When using NCBI2NA_ENCODING, this argument should be set to
  82.  *        eNoSentinels as a sentinel byte cannot be represented in this 
  83.  *        encoding. [in]
  84.  * @return pair containing the buffer and its length. 
  85.  */
  86. pair<AutoPtr<Uint1, CDeleter<Uint1> >, TSeqPos>
  87. GetSequence(const objects::CSeq_loc& sl, Uint1 encoding, 
  88.             objects::CScope* scope,
  89.             objects::ENa_strand strand = objects::eNa_strand_plus, 
  90.             ESentinelType sentinel = eSentinels)
  91.             THROWS((CBlastException, CException));
  92. /** Calculates the length of the buffer to allocate given the desired encoding,
  93.  * strand (if applicable) and use of sentinel bytes around sequence
  94.  * @param sequence_length Length of the sequence [in]
  95.  * @param encoding Desired encoding for calculation (supported encodings are
  96.  *        listed in GetSequence()) [in]
  97.  * @param strand Which strand to use for calculation [in]
  98.  * @param sentinel Whether to include or not sentinels in calculation. Same
  99.  *        criteria as GetSequence() applies [in]
  100.  * @return Length of the buffer to allocate to contain original sequence of
  101.  *        length sequence_length for given encoding and parameter constraints
  102.  */
  103. TSeqPos
  104. CalculateSeqBufferLength(TSeqPos sequence_length, Uint1 encoding,
  105.                          objects::ENa_strand strand =
  106.                          objects::eNa_strand_unknown,
  107.                          ESentinelType sentinel = eSentinels)
  108.                          THROWS((CBlastException));
  109. /** Convenience function to centralize the knowledge of which sentinel bytes we
  110.  * use for supported encodings. Note that only BLASTP_ENCODING,
  111.  * BLASTNA_ENCODING, and NCBI4NA_ENCODING support sentinel bytes, any other
  112.  * values for encoding will cause an exception to be thrown.
  113.  * @param encoding Encoding for which a sentinel byte is needed [in]
  114.  * @return sentinel byte
  115.  */
  116. Uint1 GetSentinelByte(Uint1 encoding) THROWS((CBlastException));
  117. #if 0
  118. // not used right now
  119. /** Translates nucleotide query sequences to protein in the requested frame
  120.  * @param nucl_seq forward (plus) strand of the nucleotide sequence [in]
  121.  * @param nucl_seq_rev reverse (minus) strand of the nucleotide sequence [in]
  122.  * @param nucl_length length of a single strand of the nucleotide sequence [in]
  123.  * @param frame frame to translate, allowed values: 1,2,3,-1,-2,-3 [in]
  124.  * @param translation buffer to hold the translation, should be allocated
  125.  * outside this function [out]
  126.  */
  127. void
  128. BLASTGetTranslation(const Uint1* nucl_seq, const Uint1* nucl_seq_rev, 
  129.                     const int nucl_length, const short frame, Uint1* translation);
  130. #endif
  131. /** Retrieves the requested genetic code in Ncbistdaa format. 
  132.  * @param genetic_code numeric identifier for genetic code requested [in]
  133.  */
  134. AutoPtr<Uint1, ArrayDeleter<Uint1> >
  135. FindGeneticCode(int genetic_code);
  136. /** Returns the path (including a trailing path separator) to the location
  137.  * where the matrix can be found.
  138.  * @param matrix_name matrix to search for
  139.  * @param is_prot true if this is a protein matrix
  140.  */
  141. string
  142. FindMatrixPath(const char* matrix_name, bool is_prot);
  143. /** Returns the path (including a trailing path separator) to the location
  144.  * where the BLAST database can be found.
  145.  * @param dbname Database to search for
  146.  * @param is_prot true if this is a protein matrix
  147.  */
  148. string
  149. FindBlastDbPath(const char* dbname, bool is_prot);
  150. /** Returns the number of frames for a given BLAST program
  151.  * @param p program 
  152.  */
  153. unsigned int 
  154. GetNumberOfFrames(EProgram p);
  155. END_SCOPE(blast)
  156. END_NCBI_SCOPE
  157. /*
  158. * ===========================================================================
  159. *
  160. * $Log: blast_setup.hpp,v $
  161. * Revision 1000.2  2004/06/01 18:05:55  gouriano
  162. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.21
  163. *
  164. * Revision 1.21  2004/05/19 14:52:01  camacho
  165. * 1. Added doxygen tags to enable doxygen processing of algo/blast/core
  166. * 2. Standardized copyright, CVS $Id string, $Log and rcsid formatting and i
  167. *    location
  168. * 3. Added use of @todo doxygen keyword
  169. *
  170. * Revision 1.20  2004/04/06 20:45:28  dondosha
  171. * Added function FindBlastDbPath: should be moved to seqdb library
  172. *
  173. * Revision 1.19  2004/03/15 19:57:52  dondosha
  174. * SetupSubjects takes just program argument instead of CBlastOptions*
  175. *
  176. * Revision 1.18  2004/03/06 00:39:47  camacho
  177. * Some refactorings, changed boolen parameter to enum in GetSequence
  178. *
  179. * Revision 1.17  2003/12/29 17:03:47  camacho
  180. * Added documentation to GetSequence
  181. *
  182. * Revision 1.16  2003/10/29 04:45:58  camacho
  183. * Use fixed AutoPtr for GetSequence return value
  184. *
  185. * Revision 1.15  2003/09/12 17:52:42  camacho
  186. * Stop using pair<> as return value from GetSequence
  187. *
  188. * Revision 1.14  2003/09/11 20:55:01  camacho
  189. * Temporary fix for AutoPtr return value
  190. *
  191. * Revision 1.13  2003/09/11 17:45:03  camacho
  192. * Changed CBlastOption -> CBlastOptions
  193. *
  194. * Revision 1.12  2003/09/10 04:25:28  camacho
  195. * Minor change to return type of GetSequence
  196. *
  197. * Revision 1.11  2003/09/09 15:57:23  camacho
  198. * Fix indentation
  199. *
  200. * Revision 1.10  2003/09/09 12:57:15  camacho
  201. * + internal setup functions, use smart pointers to handle memory mgmt
  202. *
  203. * Revision 1.9  2003/08/28 22:43:02  camacho
  204. * Change BLASTGetSequence signature
  205. *
  206. * Revision 1.8  2003/08/19 13:45:21  dicuccio
  207. * Removed 'USING_SCOPE(objects)'.  Changed #include guards to be standards
  208. * compliant.  Added 'objects::' where necessary.
  209. *
  210. * Revision 1.7  2003/08/18 20:58:56  camacho
  211. * Added blast namespace, removed *__.hpp includes
  212. *
  213. * Revision 1.6  2003/08/11 19:55:04  camacho
  214. * Early commit to support query concatenation and the use of multiple scopes.
  215. * Compiles, but still needs work.
  216. *
  217. * Revision 1.5  2003/08/11 13:58:51  dicuccio
  218. * Added export specifiers.  Fixed problem with unimplemented private copy ctor
  219. * (truly make unimplemented)
  220. *
  221. * Revision 1.4  2003/08/01 22:35:02  camacho
  222. * Added function to get matrix path (fixme)
  223. *
  224. * Revision 1.3  2003/07/30 15:00:01  camacho
  225. * Do not use Malloc/MemNew/MemFree
  226. *
  227. * Revision 1.2  2003/07/23 21:29:06  camacho
  228. * Update BLASTFindGeneticCode to get genetic code string with C++ toolkit
  229. *
  230. * Revision 1.1  2003/07/10 18:34:19  camacho
  231. * Initial revision
  232. *
  233. *
  234. * ===========================================================================
  235. */
  236. #endif  /* ALGO_BLAST_API___BLAST_SETUP__HPP */