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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: reader_pubseq.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 17:38:17  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.27
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef READER_PUBSEQ__HPP_INCLUDED
  10. #define READER_PUBSEQ__HPP_INCLUDED
  11. /*  $Id: reader_pubseq.hpp,v 1000.0 2004/04/12 17:38:17 gouriano Exp $
  12. * ===========================================================================
  13. *                            PUBLIC DOMAIN NOTICE
  14. *               National Center for Biotechnology Information
  15. *
  16. *  This software/database is a "United States Government Work" under the
  17. *  terms of the United States Copyright Act.  It was written as part of
  18. *  the author's official duties as a United States Government employee and
  19. *  thus cannot be copyrighted.  This software/database is freely available
  20. *  to the public for use. The National Library of Medicine and the U.S.
  21. *  Government have not placed any restriction on its use or reproduction.
  22. *
  23. *  Although all reasonable efforts have been taken to ensure the accuracy
  24. *  and reliability of the software and data, the NLM and the U.S.
  25. *  Government do not and cannot warrant the performance or results that
  26. *  may be obtained by using this software or data. The NLM and the U.S.
  27. *  Government disclaim all warranties, express or implied, including
  28. *  warranties of performance, merchantability or fitness for any particular
  29. *  purpose.
  30. *
  31. *  Please cite the author in any work or product based on this material.
  32. * ===========================================================================
  33. *
  34. *  Author:  Anton Butanaev, Eugene Vasilchenko
  35. *
  36. *  File Description: Data reader from Pubseq_OS
  37. *
  38. */
  39. #include <objtools/data_loaders/genbank/reader.hpp>
  40. #include <memory>
  41. BEGIN_NCBI_SCOPE
  42. class CDB_Connection;
  43. class CDB_RPCCmd;
  44. class CDB_Result;
  45. class I_DriverContext;
  46. BEGIN_SCOPE(objects)
  47. class CPubseqReader;
  48. class CPubseqBlob;
  49. class NCBI_XREADER_PUBSEQOS_EXPORT CPubseqReader : public CReader
  50. {
  51. public:
  52.     CPubseqReader(TConn parallelLevel = 2,
  53.                   const string& server = "PUBSEQ_OS",
  54.                   const string& user="anyone",
  55.                   const string& pswd = "allowed");
  56.     ~CPubseqReader();
  57.     virtual int ResolveSeq_id_to_gi(const CSeq_id& seqId, TConn conn);
  58.     virtual void ResolveSeq_id(TSeqrefs& sr, const CSeq_id& id, TConn conn);
  59.     virtual void RetrieveSeqrefs(TSeqrefs& sr, int gi, TConn conn);
  60.     virtual CRef<CTSE_Info> GetTSEBlob(const CSeqref& seqref, TConn conn);
  61.     virtual CRef<CSeq_annot_SNP_Info> GetSNPAnnot(const CSeqref& seqref,
  62.                                                   TConn conn);
  63.     virtual TConn GetParallelLevel(void) const;
  64.     virtual void SetParallelLevel(TConn);
  65.     CDB_Connection* GetConnection(TConn);
  66.     virtual void Reconnect(TConn);
  67. private:
  68.     CDB_Connection* x_GetConnection(TConn conn);
  69.     CDB_Connection* x_NewConnection(void);
  70.     void x_RetrieveSeqrefs(TSeqrefs& srs, CDB_RPCCmd& cmd, int gi);
  71.     CDB_RPCCmd* x_SendRequest(const CSeqref& seqref,
  72.                               CDB_Connection* db_conn,
  73.                               bool is_snp);
  74.     CDB_Result* x_ReceiveData(CDB_RPCCmd& cmd);
  75.     CRef<CTSE_Info> x_ReceiveMainBlob(CDB_Result& result);
  76.     CRef<CSeq_annot_SNP_Info> x_ReceiveSNPAnnot(CDB_Result& result);
  77.     
  78.     string                    m_Server;
  79.     string                    m_User;
  80.     string                    m_Password;
  81.     auto_ptr<I_DriverContext> m_Context;
  82.     vector<CDB_Connection *>  m_Pool;
  83.     bool                      m_NoMoreConnections;
  84. };
  85. END_SCOPE(objects)
  86. extern NCBI_XREADER_PUBSEQOS_EXPORT const string kPubseqReaderDriverName;
  87. extern "C" 
  88. {
  89. void NCBI_XREADER_PUBSEQOS_EXPORT NCBI_EntryPoint_ReaderPubseqos(
  90.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  91.      CPluginManager<objects::CReader>::EEntryPointRequest method);
  92. inline
  93. void NCBI_XREADER_PUBSEQOS_EXPORT NCBI_EntryPoint_Reader_Pubseqos(
  94.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  95.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  96. {
  97.     NCBI_EntryPoint_ReaderPubseqos(info_list, method);
  98. }
  99. inline
  100. void NCBI_XREADER_PUBSEQOS_EXPORT NCBI_EntryPoint_ncbi_xreader_pubseqos(
  101.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  102.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  103. {
  104.     NCBI_EntryPoint_ReaderPubseqos(info_list, method);
  105. }
  106. inline void 
  107. NCBI_XREADER_PUBSEQOS_EXPORT NCBI_EntryPoint_Reader_ncbi_xreader_pubseqos(
  108.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  109.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  110. {
  111.     NCBI_EntryPoint_ReaderPubseqos(info_list, method);
  112. }
  113. inline void 
  114. NCBI_XREADER_PUBSEQOS_EXPORT NCBI_EntryPoint_Pubseqos_ncbi_xreader_pubseqos(
  115.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  116.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  117. {
  118.     NCBI_EntryPoint_ReaderPubseqos(info_list, method);
  119. }
  120. inline void 
  121. NCBI_XREADER_PUBSEQOS_EXPORT NCBI_EntryPoint_Reader_Pubseqos_ncbi_xreader_pubseqos(
  122.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  123.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  124. {
  125.     NCBI_EntryPoint_ReaderPubseqos(info_list, method);
  126. }
  127. } // extern C
  128. END_NCBI_SCOPE
  129. /*
  130. * $Log: reader_pubseq.hpp,v $
  131. * Revision 1000.0  2004/04/12 17:38:17  gouriano
  132. * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.27
  133. *
  134. * Revision 1.27  2004/02/04 17:48:24  kuznets
  135. * Fixed naming of entry points
  136. *
  137. * Revision 1.26  2004/02/04 17:44:26  kuznets
  138. * Fixed naming of DLL entry points.
  139. *
  140. * Revision 1.25  2004/01/22 20:10:34  vasilche
  141. * 1. Splitted ID2 specs to two parts.
  142. * ID2 now specifies only protocol.
  143. * Specification of ID2 split data is moved to seqsplit ASN module.
  144. * For now they are still reside in one resulting library as before - libid2.
  145. * As the result split specific headers are now in objects/seqsplit.
  146. * 2. Moved ID2 and ID1 specific code out of object manager.
  147. * Protocol is processed by corresponding readers.
  148. * ID2 split parsing is processed by ncbi_xreader library - used by all readers.
  149. * 3. Updated OBJMGR_LIBS correspondingly.
  150. *
  151. * Revision 1.24  2004/01/13 21:58:42  vasilche
  152. * Requrrected new version
  153. *
  154. * Revision 1.4  2004/01/13 16:55:54  vasilche
  155. * CReader, CSeqref and some more classes moved from xobjmgr to separate lib.
  156. * Headers moved from include/objmgr to include/objtools/data_loaders/genbank.
  157. *
  158. * Revision 1.3  2003/12/30 22:14:40  vasilche
  159. * Updated genbank loader and readers plugins.
  160. *
  161. * Revision 1.22  2003/12/19 19:47:44  vasilche
  162. * Added support for TRACE data, Seq-id ::= general { db "ti", tag id NNN }.
  163. *
  164. * Revision 1.21  2003/12/03 15:10:30  kuznets
  165. * Minor bug fixed.
  166. *
  167. * Revision 1.20  2003/12/03 14:28:23  kuznets
  168. * Added driver name constant.
  169. *
  170. * Revision 1.19  2003/12/02 16:17:42  kuznets
  171. * Added plugin manager support for CReader interface and implementaions
  172. * (id1 reader, pubseq reader)
  173. *
  174. * Revision 1.18  2003/11/26 17:55:54  vasilche
  175. * Implemented ID2 split in ID1 cache.
  176. * Fixed loading of splitted annotations.
  177. *
  178. * Revision 1.17  2003/10/21 14:27:34  vasilche
  179. * Added caching of gi -> sat,satkey,version resolution.
  180. * SNP blobs are stored in cache in preprocessed format (platform dependent).
  181. * Limit number of connections to GenBank servers.
  182. * Added collection of ID1 loader statistics.
  183. *
  184. * Revision 1.16  2003/09/30 16:21:59  vasilche
  185. * Updated internal object manager classes to be able to load ID2 data.
  186. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  187. * Scope caches results of requests for data to data loaders.
  188. * Optimized CSeq_id_Handle for gis.
  189. * Optimized bioseq lookup in scope.
  190. * Reduced object allocations in annotation iterators.
  191. * CScope is allowed to be destroyed before other objects using this scope are
  192. * deleted (feature iterators, bioseq handles etc).
  193. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  194. * Added 'adaptive' option to objmgr_demo application.
  195. *
  196. * Revision 1.15  2003/06/02 16:01:36  dicuccio
  197. * Rearranged include/objects/ subtree.  This includes the following shifts:
  198. *     - include/objects/alnmgr --> include/objtools/alnmgr
  199. *     - include/objects/cddalignview --> include/objtools/cddalignview
  200. *     - include/objects/flat --> include/objtools/flat
  201. *     - include/objects/objmgr/ --> include/objmgr/
  202. *     - include/objects/util/ --> include/objmgr/util/
  203. *     - include/objects/validator --> include/objtools/validator
  204. *
  205. * Revision 1.14  2003/04/24 16:12:37  vasilche
  206. * Object manager internal structures are splitted more straightforward.
  207. * Removed excessive header dependencies.
  208. *
  209. * Revision 1.13  2003/04/15 15:30:14  vasilche
  210. * Added include <memory> when needed.
  211. * Removed buggy buffer in printing methods.
  212. * Removed unnecessary include of stream_util.hpp.
  213. *
  214. * Revision 1.12  2003/04/15 14:24:07  vasilche
  215. * Changed CReader interface to not to use fake streams.
  216. *
  217. * Revision 1.11  2003/03/26 16:11:06  vasilche
  218. * Removed redundant const modifier from integral return types.
  219. *
  220. * Revision 1.10  2002/12/26 20:51:35  dicuccio
  221. * Added Win32 export specifier
  222. *
  223. * Revision 1.9  2002/07/08 20:50:56  grichenk
  224. * Moved log to the end of file
  225. * Replaced static mutex (in CScope, CDataSource) with the mutex
  226. * pool. Redesigned CDataSource data locking.
  227. *
  228. * Revision 1.8  2002/05/06 03:30:36  vakatov
  229. * OM/OM1 renaming
  230. *
  231. * Revision 1.7  2002/05/03 21:28:02  ucko
  232. * Introduce T(Signed)SeqPos.
  233. *
  234. * Revision 1.6  2002/04/11 17:40:18  kimelman
  235. * recovery from bad commit
  236. *
  237. * Revision 1.5  2002/04/11 17:32:21  butanaev
  238. * Switched to using dbapi driver manager.
  239. *
  240. * Revision 1.4  2002/04/10 22:47:54  kimelman
  241. * added pubseq_reader as default one
  242. *
  243. * Revision 1.3  2002/04/09 18:48:14  kimelman
  244. * portability bugfixes: to compile on IRIX, sparc gcc
  245. *
  246. * Revision 1.2  2002/04/08 23:07:50  vakatov
  247. * #include <vector>
  248. * get rid of the "using ..." directive in the header
  249. *
  250. * Revision 1.1  2002/04/08 20:52:08  butanaev
  251. * Added PUBSEQ reader.
  252. *
  253. * Revision 1.7  2002/04/05 20:53:29  butanaev
  254. * Added code to detect database api availability.
  255. *
  256. * Revision 1.6  2002/04/03 18:37:33  butanaev
  257. * Replaced DBLink with dbapi.
  258. *
  259. * Revision 1.5  2001/12/19 19:42:13  butanaev
  260. * Implemented construction of PUBSEQ blob stream, CPubseqReader family  interfaces.
  261. *
  262. * Revision 1.4  2001/12/14 20:48:08  butanaev
  263. * Implemented fetching Seqrefs from PUBSEQ.
  264. *
  265. * Revision 1.3  2001/12/13 17:50:34  butanaev
  266. * Adjusted for new interface changes.
  267. *
  268. * Revision 1.2  2001/12/12 22:08:58  butanaev
  269. * Removed duplicate code, created frame for CPubseq* implementation.
  270. *
  271. */
  272. #endif // READER_PUBSEQ__HPP_INCLUDED