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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: db_blast.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 18:02:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: db_blast.hpp,v 1000.3 2004/06/01 18:02:57 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:  Ilya Dondoshansky
  35. *
  36. * File Description:
  37. *   Database BLAST class interface
  38. *
  39. */
  40. #ifndef ALGO_BLAST_API___DBBLAST__HPP
  41. #define ALGO_BLAST_API___DBBLAST__HPP
  42. #include <algo/blast/api/blast_options.hpp>
  43. #include <algo/blast/api/blast_options_handle.hpp>
  44. #include <algo/blast/core/blast_seqsrc.h>
  45. #include <algo/blast/core/blast_engine.h>
  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. // Type definition for a vector of error messages from the BLAST engine
  53. typedef vector<Blast_Message*> TBlastError;
  54. /// Runs the BLAST algorithm between a set of sequences and BLAST database
  55. class NCBI_XBLAST_EXPORT CDbBlast : public CObject
  56. {
  57. public:
  58.     /// Contructor, creating default options for a given program
  59.     CDbBlast(const TSeqLocVector& queries, 
  60.              BlastSeqSrc* bssp, EProgram p, RPSInfo* rps_info=0);
  61.     // Constructor using a prebuilt options handle
  62.     CDbBlast(const TSeqLocVector& queries, BlastSeqSrc* bssp, 
  63.              CBlastOptionsHandle& opts, RPSInfo* rps_info=0);
  64.     virtual ~CDbBlast();
  65.     void SetQueries(const TSeqLocVector& queries);
  66.     const TSeqLocVector& GetQueries() const;
  67.     CBlastOptions& SetOptions();
  68.     const CBlastOptions& GetOptions() const;
  69.     CBlastOptionsHandle& SetOptionsHandle();
  70.     const CBlastOptionsHandle& GetOptionsHandle() const;
  71.     // Perform BLAST search
  72.     virtual TSeqAlignVector Run();
  73.     // Run BLAST search without traceback
  74.     virtual void PartialRun();
  75.     
  76.     // Remove extra results if a limit is provided on total number of HSPs
  77.     void TrimBlastHSPResults();
  78.     /// Retrieves regions filtered on the query/queries
  79.     //const TSeqLocVector& GetFilteredQueryRegions() const;
  80.     const BlastMaskLoc* GetFilteredQueryRegions() const;
  81.     void SetSeqSrc(BlastSeqSrc* seq_src, bool free_old_src=false);
  82.     BlastSeqSrc* GetSeqSrc() const;
  83.     BlastHSPResults* GetResults() const;
  84.     BlastDiagnostics* GetDiagnostics() const;
  85.     BlastScoreBlk* GetScoreBlk() const;
  86.     const CBlastQueryInfo& GetQueryInfo() const;
  87.     TBlastError& GetErrorMessage();
  88. protected:
  89.     virtual int SetupSearch();
  90.     virtual void RunSearchEngine();
  91.     virtual TSeqAlignVector x_Results2SeqAlign();
  92.     virtual void x_ResetQueryDs();
  93.     virtual void x_ResetResultDs();
  94.     virtual void x_InitFields();
  95.     BlastScoringOptions* GetScoringOpts() const;
  96.     BlastEffectiveLengthsOptions* GetEffLenOpts() const;
  97.     BlastExtensionOptions * GetExtnOpts() const;
  98.     BlastHitSavingOptions * GetHitSaveOpts() const;
  99.     QuerySetUpOptions * GetQueryOpts() const;
  100.     BlastDatabaseOptions * GetDbOpts() const;
  101.     PSIBlastOptions * GetPSIBlastOpts() const;    
  102.     RPSInfo * GetRPSInfo() const;    
  103.     /// Internal data structures used in this and all derived classes 
  104.     bool                m_ibQuerySetUpDone;
  105.     CBLAST_SequenceBlk  m_iclsQueries;  // one for all queries
  106.     CBlastQueryInfo     m_iclsQueryInfo; // one for all queries
  107.     BlastScoreBlk*      m_ipScoreBlock; // Karlin-Altschul parameters
  108.     /// Statistical return structures
  109.     BlastDiagnostics*    m_ipDiagnostics;
  110.     /// Error (info, warning) messages
  111.     TBlastError         m_ivErrors;
  112.    
  113.     /// Results structure - not private, because derived class will need to
  114.     /// set it
  115.     BlastHSPResults*    m_ipResults;
  116. private:
  117.     // Data members received from client code
  118.     TSeqLocVector        m_tQueries;         //< query sequence(s)
  119.     BlastSeqSrc*         m_pSeqSrc;          //< Subject sequences sorce
  120.     RPSInfo*             m_pRpsInfo; ///< RPS BLAST database information
  121.     CRef<CBlastOptionsHandle>  m_OptsHandle; //< Blast options
  122.     /// Prohibit copy constructor
  123.     CDbBlast(const CDbBlast& rhs);
  124.     /// Prohibit assignment operator
  125.     CDbBlast& operator=(const CDbBlast& rhs);
  126.     /************ Internal data structures (m_i = internal members)**********/
  127.     LookupTableWrap*    m_ipLookupTable; // one for all queries
  128.     ListNode*           m_ipLookupSegments; /* Intervals for which lookup 
  129.                                                table is created: complement of
  130.                                                filtered regions */
  131.     BlastMaskLoc*       m_ipFilteredRegions; // Filtered regions
  132. };
  133. inline void
  134. CDbBlast::SetQueries(const TSeqLocVector& queries)
  135. {
  136.     x_ResetQueryDs();
  137.     m_tQueries.clear();
  138.     m_tQueries = queries;
  139. }
  140. inline const TSeqLocVector&
  141. CDbBlast::GetQueries() const
  142. {
  143.     return m_tQueries;
  144. }
  145. inline CBlastOptions&
  146. CDbBlast::SetOptions()
  147. {
  148.     m_ibQuerySetUpDone = false;
  149.     return m_OptsHandle->SetOptions();
  150. }
  151. inline const CBlastOptions&
  152. CDbBlast::GetOptions() const
  153. {
  154.     return m_OptsHandle->GetOptions();
  155. }
  156. inline CBlastOptionsHandle&
  157. CDbBlast::SetOptionsHandle()
  158. {
  159.     m_ibQuerySetUpDone = false;
  160.     return *m_OptsHandle;
  161. }
  162. inline const CBlastOptionsHandle&
  163. CDbBlast::GetOptionsHandle() const
  164. {
  165.     return *m_OptsHandle;
  166. }
  167. inline const BlastMaskLoc*
  168. CDbBlast::GetFilteredQueryRegions() const
  169. {
  170.     return m_ipFilteredRegions;
  171. }
  172. inline void CDbBlast::SetSeqSrc(BlastSeqSrc* seq_src, bool free_old_src)
  173. {
  174.     x_ResetResultDs();
  175.     if (free_old_src)
  176.         BlastSeqSrcFree(m_pSeqSrc);
  177.     m_pSeqSrc = seq_src;
  178. }
  179. inline BlastSeqSrc* CDbBlast::GetSeqSrc() const
  180. {
  181.     return m_pSeqSrc;
  182. }
  183. inline BlastHSPResults* CDbBlast::GetResults() const
  184. {
  185.     return m_ipResults;
  186. }
  187. inline BlastDiagnostics* CDbBlast::GetDiagnostics() const
  188. {
  189.     return m_ipDiagnostics;
  190. }
  191. inline BlastScoreBlk* CDbBlast::GetScoreBlk() const
  192. {
  193.     return m_ipScoreBlock;
  194. }
  195. inline const CBlastQueryInfo& CDbBlast::GetQueryInfo() const
  196. {
  197.     return m_iclsQueryInfo;
  198. }
  199. inline TBlastError& CDbBlast::GetErrorMessage()
  200. {
  201.     return m_ivErrors;
  202. }
  203. inline RPSInfo * CDbBlast::GetRPSInfo() const
  204. {
  205.     return m_pRpsInfo;
  206. }
  207. inline BlastScoringOptions* CDbBlast::GetScoringOpts() const
  208. {
  209.     return m_OptsHandle->GetOptions().GetScoringOpts();
  210. }
  211. inline BlastEffectiveLengthsOptions* CDbBlast::GetEffLenOpts() const
  212. {
  213.     return m_OptsHandle->GetOptions().GetEffLenOpts();
  214. }
  215. inline BlastExtensionOptions * CDbBlast::GetExtnOpts() const
  216. {
  217.     return m_OptsHandle->GetOptions().GetExtnOpts();
  218. }
  219. inline BlastHitSavingOptions * CDbBlast::GetHitSaveOpts() const
  220. {
  221.     return m_OptsHandle->GetOptions().GetHitSaveOpts();
  222. }
  223. inline QuerySetUpOptions * CDbBlast::GetQueryOpts() const
  224. {
  225.     return m_OptsHandle->GetOptions().GetQueryOpts();
  226. }
  227. inline BlastDatabaseOptions * CDbBlast::GetDbOpts() const
  228. {
  229.     return m_OptsHandle->GetOptions().GetDbOpts();
  230. }
  231. inline PSIBlastOptions * CDbBlast::GetPSIBlastOpts() const
  232. {
  233.     return m_OptsHandle->GetOptions().GetPSIBlastOpts();
  234. }
  235. END_SCOPE(blast)
  236. END_NCBI_SCOPE
  237. /*
  238. * ===========================================================================
  239. *
  240. * $Log: db_blast.hpp,v $
  241. * Revision 1000.3  2004/06/01 18:02:57  gouriano
  242. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18
  243. *
  244. * Revision 1.18  2004/05/17 18:07:19  bealer
  245. * - Add PSI Blast support.
  246. *
  247. * Revision 1.17  2004/05/14 17:15:59  dondosha
  248. * BlastReturnStat structure changed to BlastDiagnostics and refactored
  249. *
  250. * Revision 1.16  2004/05/07 15:39:23  papadopo
  251. * add getter for the RPSInfo private member, since the scale factor is now explicitly needed in the implementation of this class
  252. *
  253. * Revision 1.15  2004/05/05 15:28:31  dondosha
  254. * Added SetSeqSrc method
  255. *
  256. * Revision 1.14  2004/05/04 14:05:30  dondosha
  257. * Removed extra unimplemented SetOptions method
  258. *
  259. * Revision 1.13  2004/03/16 23:29:55  dondosha
  260. * Added optional RPSInfo* argument to constructors; added function x_InitFields; changed mi_ to m_i in member field names
  261. *
  262. * Revision 1.12  2004/02/27 15:42:18  rsmith
  263. * No class specifiers inside that class's declaration
  264. *
  265. * Revision 1.11  2004/02/25 15:44:47  dondosha
  266. * Corrected prototype for GetErrorMessage to eliminate warning on Sun compiler
  267. *
  268. * Revision 1.10  2004/02/24 20:38:20  dondosha
  269. * Removed irrelevant CVS log comments
  270. *
  271. * Revision 1.9  2004/02/24 18:18:54  dondosha
  272. * Made some private variables and methods protected - needed for derived class; added getters for various options
  273. *
  274. * Revision 1.8  2004/02/19 21:10:25  dondosha
  275. * Added vector of error messages to the CDbBlast class
  276. *
  277. * Revision 1.7  2004/02/18 23:48:45  dondosha
  278. * Added TrimBlastHSPResults method to remove extra HSPs if limit on total number is provided
  279. *
  280. * Revision 1.6  2003/12/15 15:52:29  dondosha
  281. * Added constructor with options handle argument
  282. *
  283. * Revision 1.5  2003/12/10 20:08:59  dondosha
  284. * Added function to retrieve the query info structure
  285. *
  286. * Revision 1.4  2003/12/08 22:43:05  dondosha
  287. * Added getters for score block and return stats structures
  288. *
  289. * Revision 1.3  2003/12/03 16:36:07  dondosha
  290. * Renamed BlastMask to BlastMaskLoc, BlastResults to BlastHSPResults
  291. *
  292. * Revision 1.2  2003/11/26 18:36:44  camacho
  293. * Renaming blast_option*pp -> blast_options*pp
  294. *
  295. * Revision 1.1  2003/10/29 22:37:21  dondosha
  296. * Database BLAST search class
  297. * ===========================================================================
  298. */
  299. #endif  /* ALGO_BLAST_API___DBBLAST__HPP */