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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bl2seq.hpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 18:02:35  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.33
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: bl2seq.hpp,v 1000.4 2004/06/01 18:02:35 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 bl2seq.hpp
  38. /// Declares the CBl2Seq (BLAST 2 Sequences) class
  39. #ifndef ALGO_BLAST_API___BL2SEQ__HPP
  40. #define ALGO_BLAST_API___BL2SEQ__HPP
  41. #include <algo/blast/api/blast_options_handle.hpp>
  42. /** @addtogroup AlgoBlast
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. BEGIN_SCOPE(objects)
  48.     class CSeq_loc;
  49.     class CSeq_align_set;
  50. END_SCOPE(objects)
  51. BEGIN_SCOPE(blast)
  52. /// Runs the BLAST algorithm between 2 sequences.
  53. class NCBI_XBLAST_EXPORT CBl2Seq : public CObject
  54. {
  55. public:
  56.     /// Constructor to compare 2 sequences
  57.     CBl2Seq(const SSeqLoc& query, const SSeqLoc& subject, EProgram p);
  58.     /// Constructor to compare query against all subject sequences
  59.     CBl2Seq(const SSeqLoc& query, const TSeqLocVector& subjects, EProgram p);
  60.     /// Contructor to allow query concatenation
  61.     CBl2Seq(const TSeqLocVector& queries, const TSeqLocVector& subjects, 
  62.             EProgram p);
  63.     CBl2Seq(const SSeqLoc& query, const SSeqLoc& subject, 
  64.             CBlastOptionsHandle& opts);
  65.     /// Constructor to compare query against all subject sequences
  66.     CBl2Seq(const SSeqLoc& query, const TSeqLocVector& subjects, 
  67.             CBlastOptionsHandle& opts);
  68.     /// Contructor to allow query concatenation
  69.     CBl2Seq(const TSeqLocVector& queries, const TSeqLocVector& subjects, 
  70.             CBlastOptionsHandle& opts);
  71.     virtual ~CBl2Seq();
  72.     void SetQuery(const SSeqLoc& query);
  73.     const SSeqLoc& GetQuery() const;
  74.     void SetQueries(const TSeqLocVector& queries);
  75.     const TSeqLocVector& GetQueries() const;
  76.     void SetSubject(const SSeqLoc& subject);
  77.     const SSeqLoc& GetSubject() const;
  78.     void SetSubjects(const TSeqLocVector& subjects);
  79.     const TSeqLocVector& GetSubjects() const;
  80.     CBlastOptions& SetOptions();
  81.     const CBlastOptions& GetOptions() const;
  82.     CBlastOptionsHandle& SetOptionsHandle();
  83.     const CBlastOptionsHandle& GetOptionsHandle() const;
  84.     /// Perform BLAST search
  85.     /// Assuming N queries and M subjects, the structure of the returned 
  86.     /// vector is as follows, with types indicated in parenthesis:
  87.     /// TSeqAlignVector = [ {Results for query 1 (Seq-align-set)}, 
  88.     ///                     {Results for query 2 (Seq-align-set)}, ...
  89.     ///                     {Results for query N (Seq-align-set)} ]
  90.     /// 
  91.     /// The individual query-subject alignments are returned in the
  92.     /// CSeq_align_set for that query:
  93.     /// {Results for query i} = 
  94.     ///     [ {Results for query i and subject 1 (discontinuous Seq-align)}, 
  95.     ///       {Results for query i and subject 2 (discontinuous Seq-align)}, ...
  96.     ///       {Results for query i and subject M (discontinuous Seq-align)} ]
  97.     /// Discontinuous Seq-aligns are used to allow grouping of multiple HSPs
  98.     /// that correspond to that query-subject alignment.
  99.     virtual TSeqAlignVector Run() THROWS((CBlastException));
  100.     /// Retrieves regions filtered on the query/queries
  101.     //const TSeqLocVector& GetFilteredQueryRegions() const;
  102.     const vector< CConstRef<objects::CSeq_loc> >& GetFilteredQueryRegions() const;
  103.     /// Retrieves the diagnostics information returned from the engine
  104.     BlastDiagnostics* GetDiagnostics() const;
  105. protected:
  106.     virtual void SetupSearch();
  107.     virtual void ScanDB();
  108.     virtual TSeqAlignVector x_Results2SeqAlign();
  109. private:
  110.     // Data members received from client code
  111.     TSeqLocVector        m_tQueries;         //< query sequence(s)
  112.     TSeqLocVector        m_tSubjects;        //< sequence(s) to BLAST against
  113.     CRef<CBlastOptionsHandle>  m_OptsHandle;         //< Blast options
  114.     ///< Common initialization code for all c-tors
  115.     void x_InitSeqs(const TSeqLocVector& queries, const TSeqLocVector& subjs);
  116.     /// Prohibit copy constructor
  117.     CBl2Seq(const CBl2Seq& rhs);
  118.     /// Prohibit assignment operator
  119.     CBl2Seq& operator=(const CBl2Seq& rhs);
  120.     /************ Internal data structures (m_i = internal members)***********/
  121.     bool                                mi_bQuerySetUpDone;
  122.     CBLAST_SequenceBlk                  mi_clsQueries;  // one for all queries
  123.     CBlastQueryInfo                     mi_clsQueryInfo; // one for all queries
  124.     BlastSeqSrc*                        mi_pSeqSrc; // Subject sequences source
  125.     BlastScoreBlk*                      mi_pScoreBlock;
  126.     CLookupTableWrap                    mi_pLookupTable; // one for all queries
  127.     ListNode*                           mi_pLookupSegments;
  128.     CBlastInitialWordParameters         mi_clsInitWordParams;
  129.     CBlastHitSavingParameters           mi_clsHitSavingParams;
  130.     CBlast_ExtendWord                   mi_clsExtnWord;
  131.     CBlastExtensionParameters           mi_clsExtnParams;
  132.     CBlastGapAlignStruct                mi_clsGapAlign;
  133.     CBlastDatabaseOptions               mi_clsDbOptions;
  134.     /// Results for all queries and subjects together
  135.     BlastHSPResults*                    mi_pResults;
  136.     /// Return search statistics data
  137.     BlastDiagnostics*                   mi_pDiagnostics;
  138.     /// Regions filtered out from the query sequence, one per query
  139.     vector< CConstRef<objects::CSeq_loc> >       mi_vFilteredRegions;
  140.     void x_ResetQueryDs();
  141.     void x_ResetSubjectDs();
  142. };
  143. inline void
  144. CBl2Seq::SetQuery(const SSeqLoc& query)
  145. {
  146.     x_ResetQueryDs();
  147.     m_tQueries.clear();
  148.     m_tQueries.push_back(query);
  149. }
  150. inline const SSeqLoc&
  151. CBl2Seq::GetQuery() const
  152. {
  153.     return m_tQueries.front();
  154. }
  155. inline void
  156. CBl2Seq::SetQueries(const TSeqLocVector& queries)
  157. {
  158.     x_ResetQueryDs();
  159.     m_tQueries.clear();
  160.     m_tQueries = queries;
  161. }
  162. inline const TSeqLocVector&
  163. CBl2Seq::GetQueries() const
  164. {
  165.     return m_tQueries;
  166. }
  167. inline void
  168. CBl2Seq::SetSubject(const SSeqLoc& subject)
  169. {
  170.     x_ResetSubjectDs();
  171.     m_tSubjects.clear();
  172.     m_tSubjects.push_back(subject);
  173. }
  174. inline const SSeqLoc&
  175. CBl2Seq::GetSubject() const
  176. {
  177.     return m_tSubjects.front();
  178. }
  179. inline void
  180. CBl2Seq::SetSubjects(const TSeqLocVector& subjects)
  181. {
  182.     x_ResetSubjectDs();
  183.     m_tSubjects.clear();
  184.     m_tSubjects = subjects;
  185. }
  186. inline const TSeqLocVector&
  187. CBl2Seq::GetSubjects() const
  188. {
  189.     return m_tSubjects;
  190. }
  191. inline CBlastOptions&
  192. CBl2Seq::SetOptions()
  193. {
  194.     mi_bQuerySetUpDone = false;
  195.     return m_OptsHandle->SetOptions();
  196. }
  197. inline const CBlastOptions&
  198. CBl2Seq::GetOptions() const
  199. {
  200.     return m_OptsHandle->GetOptions();
  201. }
  202. inline CBlastOptionsHandle&
  203. CBl2Seq::SetOptionsHandle()
  204. {
  205.     mi_bQuerySetUpDone = false;
  206.     return *m_OptsHandle;
  207. }
  208. inline const CBlastOptionsHandle&
  209. CBl2Seq::GetOptionsHandle() const
  210. {
  211.     return *m_OptsHandle;
  212. }
  213. inline const vector< CConstRef<objects::CSeq_loc> >&
  214. CBl2Seq::GetFilteredQueryRegions() const
  215. {
  216.     return mi_vFilteredRegions;
  217. }
  218. inline BlastDiagnostics* CBl2Seq::GetDiagnostics() const
  219. {
  220.     return mi_pDiagnostics;
  221. }
  222. END_SCOPE(blast)
  223. END_NCBI_SCOPE
  224. /* @} */
  225. /*
  226. * ===========================================================================
  227. *
  228. * $Log: bl2seq.hpp,v $
  229. * Revision 1000.4  2004/06/01 18:02:35  gouriano
  230. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.33
  231. *
  232. * Revision 1.33  2004/05/14 17:15:59  dondosha
  233. * BlastReturnStat structure changed to BlastDiagnostics and refactored
  234. *
  235. * Revision 1.32  2004/05/14 16:02:56  madden
  236. * Rename BLAST_ExtendWord to Blast_ExtendWord in order to fix conflicts with C toolkit
  237. *
  238. * Revision 1.31  2004/03/24 19:12:48  dondosha
  239. * Use auto class wrapper for lookup tabl wrap field
  240. *
  241. * Revision 1.30  2004/03/19 18:56:04  camacho
  242. * Move to doxygen AlgoBlast group
  243. *
  244. * Revision 1.29  2004/03/15 19:55:28  dondosha
  245. * Use sequence source instead of accessing subjects directly
  246. *
  247. * Revision 1.28  2004/02/13 21:21:44  camacho
  248. * Add throws clause to Run method
  249. *
  250. * Revision 1.27  2003/12/09 13:41:22  camacho
  251. * Added comment to Run method
  252. *
  253. * Revision 1.26  2003/12/03 16:36:07  dondosha
  254. * Renamed BlastMask to BlastMaskLoc, BlastResults to BlastHSPResults
  255. *
  256. * Revision 1.25  2003/11/27 04:24:39  camacho
  257. * Remove unneeded setters for options
  258. *
  259. * Revision 1.24  2003/11/26 18:36:44  camacho
  260. * Renaming blast_option*pp -> blast_options*pp
  261. *
  262. * Revision 1.23  2003/11/26 18:22:13  camacho
  263. * +Blast Option Handle classes
  264. *
  265. * Revision 1.22  2003/11/03 15:20:20  camacho
  266. * Make multiple query processing the default for Run().
  267. *
  268. * Revision 1.21  2003/10/16 03:16:39  camacho
  269. * Fix to setting queries/subjects
  270. *
  271. * Revision 1.20  2003/09/11 17:44:39  camacho
  272. * Changed CBlastOption -> CBlastOptions
  273. *
  274. * Revision 1.19  2003/09/09 20:31:21  camacho
  275. * Add const type qualifier
  276. *
  277. * Revision 1.18  2003/09/09 12:53:31  camacho
  278. * Moved setup member functions to blast_setup_cxx.cpp
  279. *
  280. * Revision 1.17  2003/08/28 17:36:21  camacho
  281. * Delete options before reassignment
  282. *
  283. * Revision 1.16  2003/08/25 17:15:33  camacho
  284. * Removed redundant typedef
  285. *
  286. * Revision 1.15  2003/08/19 22:11:16  dondosha
  287. * Cosmetic changes
  288. *
  289. * Revision 1.14  2003/08/19 20:24:17  dondosha
  290. * Added TSeqAlignVector type as a return type for results-to-seqalign functions and input for formatting
  291. *
  292. * Revision 1.13  2003/08/19 13:45:21  dicuccio
  293. * Removed 'USING_SCOPE(objects)'.  Changed #include guards to be standards
  294. * compliant.  Added 'objects::' where necessary.
  295. *
  296. * Revision 1.12  2003/08/18 20:58:56  camacho
  297. * Added blast namespace, removed *__.hpp includes
  298. *
  299. * Revision 1.11  2003/08/18 17:07:41  camacho
  300. * Introduce new SSeqLoc structure (replaces pair<CSeq_loc, CScope>).
  301. * Change in function to read seqlocs from files.
  302. *
  303. * Revision 1.10  2003/08/15 16:01:02  dondosha
  304. * TSeqLoc and TSeqLocVector types definitions moved to blast_aux.hpp, so all applications can use them
  305. *
  306. * Revision 1.9  2003/08/11 19:55:04  camacho
  307. * Early commit to support query concatenation and the use of multiple scopes.
  308. * Compiles, but still needs work.
  309. *
  310. * Revision 1.8  2003/08/11 13:58:51  dicuccio
  311. * Added export specifiers.  Fixed problem with unimplemented private copy ctor
  312. * (truly make unimplemented)
  313. *
  314. * Revision 1.7  2003/08/08 19:42:14  dicuccio
  315. * Compilation fixes: #include file relocation; fixed use of 'list' and 'vector'
  316. * as variable names
  317. *
  318. * Revision 1.6  2003/08/01 17:40:56  dondosha
  319. * Use renamed functions and structures from local blastkar.h
  320. *
  321. * Revision 1.5  2003/07/31 19:45:33  camacho
  322. * Eliminate Ptr notation
  323. *
  324. * Revision 1.4  2003/07/30 19:58:02  coulouri
  325. * use ListNode
  326. *
  327. * Revision 1.3  2003/07/30 15:00:01  camacho
  328. * Do not use Malloc/MemNew/MemFree
  329. *
  330. * Revision 1.2  2003/07/14 22:16:37  camacho
  331. * Added interface to retrieve masked regions
  332. *
  333. * Revision 1.1  2003/07/10 18:34:19  camacho
  334. * Initial revision
  335. *
  336. *
  337. * ===========================================================================
  338. */
  339. #endif  /* ALGO_BLAST_API___BL2SEQ__HPP */