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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: reader_id1.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 17:38:07  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.34
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef READER_ID1__HPP_INCLUDED
  10. #define READER_ID1__HPP_INCLUDED
  11. /*  $Id: reader_id1.hpp,v 1000.0 2004/04/12 17:38:07 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 ID1
  37. *
  38. */
  39. #include <objtools/data_loaders/genbank/reader.hpp>
  40. BEGIN_NCBI_SCOPE
  41. class CConn_ServiceStream;
  42. class CByteSourceReader;
  43. class CObjectIStream;
  44. BEGIN_SCOPE(objects)
  45. class CID1server_back;
  46. class CID1server_request;
  47. class CID1server_maxcomplex;
  48. class CID1blob_info;
  49. class CID2S_Split_Info;
  50. class NCBI_XREADER_ID1_EXPORT CId1Reader : public CReader
  51. {
  52. public:
  53.     CId1Reader(TConn noConn = 5);
  54.     ~CId1Reader();
  55.     virtual int ResolveSeq_id_to_gi(const CSeq_id& seqId, TConn conn);
  56.     virtual void ResolveSeq_id(TSeqrefs& sr, const CSeq_id& id, TConn conn);
  57.     virtual void RetrieveSeqrefs(TSeqrefs& sr, int gi, TConn conn);
  58.     CRef<CTSE_Info> GetTSEBlob(const CSeqref& seqref, TConn conn);
  59.     CRef<CSeq_annot_SNP_Info> GetSNPAnnot(const CSeqref& seqref, TConn conn);
  60.     virtual TConn GetParallelLevel(void) const;
  61.     virtual void SetParallelLevel(TConn noConn);
  62.     virtual void Reconnect(TConn conn);
  63.     int GetVersion(const CSeqref& seqref, TConn conn);
  64. protected:
  65.     CConn_ServiceStream* x_GetConnection(TConn conn);
  66.     CConn_ServiceStream* x_NewConnection(void);
  67.     static int CollectStatistics(void); // 0 - no stats, >1 - verbose
  68.     void PrintStatistics(void) const;
  69.     static void PrintStat(const char* type,
  70.                           size_t count, const char* what, double time);
  71.     static void PrintBlobStat(const char* type,
  72.                               size_t count, double bytes, double time);
  73.     static void LogStat(const char* type, const string& name, double time);
  74.     static void LogStat(const char* type,
  75.                         const string& name, const string& subkey, double time);
  76.     static void LogStat(const char* type, const CSeq_id& id, double time);
  77.     static void LogStat(const char* type,
  78.                         const CID1server_maxcomplex& maxplex, double time);
  79.     static void LogStat(const char* type, int gi, double time);
  80.     static void LogBlobStat(const char* type,
  81.                             const CSeqref& seqref, double bytes, double time);
  82.     virtual int x_GetVersion(const CSeqref& seqref, TConn conn);
  83.     virtual void x_GetTSEBlob(CID1server_back& id1_reply,
  84.                               CRef<CID2S_Split_Info>& split_info,
  85.                               const CSeqref&   seqref,
  86.                               TConn            conn);
  87.     virtual void x_GetSNPAnnot(CSeq_annot_SNP_Info& snp_info,
  88.                                const CSeqref&       seqref,
  89.                                TConn                conn);
  90.     virtual void x_ReadTSEBlob(CID1server_back& id1_reply,
  91.                                const CSeqref&   seqref,
  92.                                CNcbiIstream&    stream);
  93.     void x_ReadTSEBlob(CID1server_back& id1_reply,
  94.                        CObjectIStream& stream);
  95.     virtual void x_ReadSNPAnnot(CSeq_annot_SNP_Info& snp_info,
  96.                                 const CSeqref&       seqref,
  97.                                 CByteSourceReader&   reader);
  98.     void x_ResolveId(CID1server_back& id1_reply,
  99.                      const CID1server_request& id1_request,
  100.                      TConn conn);
  101.     void x_SendRequest(const CSeqref& seqref,
  102.                        CConn_ServiceStream* stream,
  103.                        bool is_snp);
  104.     void x_SetParams(const CSeqref& seqref,
  105.                      CID1server_maxcomplex& params,
  106.                      bool is_snp);
  107.     int x_GetVersion(const CID1blob_info& info) const;
  108. private:
  109.     CRef<CTSE_Info> x_ReceiveMainBlob(CConn_ServiceStream* stream);
  110.     vector<CConn_ServiceStream *> m_Pool;
  111.     bool                          m_NoMoreConnections;
  112. };
  113. END_SCOPE(objects)
  114. extern NCBI_XREADER_ID1_EXPORT const string kId1ReaderDriverName;
  115. extern "C" 
  116. {
  117. void NCBI_XREADER_ID1_EXPORT NCBI_EntryPoint_Id1Reader(
  118.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  119.      CPluginManager<objects::CReader>::EEntryPointRequest method);
  120. inline 
  121. void NCBI_XREADER_ID1_EXPORT NCBI_EntryPoint_Reader_Id1(
  122.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  123.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  124. {
  125.     NCBI_EntryPoint_Id1Reader(info_list, method);
  126. }
  127. inline 
  128. void NCBI_XREADER_ID1_EXPORT NCBI_EntryPoint_ncbi_xreader_id1(
  129.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  130.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  131. {
  132.     NCBI_EntryPoint_Id1Reader(info_list, method);
  133. }
  134. inline 
  135. void NCBI_XREADER_ID1_EXPORT NCBI_EntryPoint_Reader_ncbi_xreader_id1(
  136.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  137.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  138. {
  139.     NCBI_EntryPoint_Id1Reader(info_list, method);
  140. }
  141. inline 
  142. void NCBI_XREADER_ID1_EXPORT NCBI_EntryPoint_Reader_Id1_ncbi_xreader_id1(
  143.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  144.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  145. {
  146.     NCBI_EntryPoint_Id1Reader(info_list, method);
  147. }
  148. inline 
  149. void NCBI_XREADER_ID1_EXPORT NCBI_EntryPoint_Id1_ncbi_xreader_id1(
  150.      CPluginManager<objects::CReader>::TDriverInfoList&   info_list,
  151.      CPluginManager<objects::CReader>::EEntryPointRequest method)
  152. {
  153.     NCBI_EntryPoint_Id1Reader(info_list, method);
  154. }
  155. } // extern C
  156. END_NCBI_SCOPE
  157. /*
  158. * $Log: reader_id1.hpp,v $
  159. * Revision 1000.0  2004/04/12 17:38:07  gouriano
  160. * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.34
  161. *
  162. * Revision 1.34  2004/02/04 17:44:01  kuznets
  163. * Fixed naming of DLL entry points.
  164. *
  165. * Revision 1.33  2004/01/22 20:10:34  vasilche
  166. * 1. Splitted ID2 specs to two parts.
  167. * ID2 now specifies only protocol.
  168. * Specification of ID2 split data is moved to seqsplit ASN module.
  169. * For now they are still reside in one resulting library as before - libid2.
  170. * As the result split specific headers are now in objects/seqsplit.
  171. * 2. Moved ID2 and ID1 specific code out of object manager.
  172. * Protocol is processed by corresponding readers.
  173. * ID2 split parsing is processed by ncbi_xreader library - used by all readers.
  174. * 3. Updated OBJMGR_LIBS correspondingly.
  175. *
  176. * Revision 1.32  2004/01/13 21:58:42  vasilche
  177. * Requrrected new version
  178. *
  179. * Revision 1.4  2004/01/13 16:55:53  vasilche
  180. * CReader, CSeqref and some more classes moved from xobjmgr to separate lib.
  181. * Headers moved from include/objmgr to include/objtools/data_loaders/genbank.
  182. *
  183. * Revision 1.3  2003/12/30 22:14:40  vasilche
  184. * Updated genbank loader and readers plugins.
  185. *
  186. * Revision 1.30  2003/12/30 16:00:05  vasilche
  187. * Added support for new ICache (CBDB_Cache) interface.
  188. *
  189. * Revision 1.29  2003/12/19 19:47:44  vasilche
  190. * Added support for TRACE data, Seq-id ::= general { db "ti", tag id NNN }.
  191. *
  192. * Revision 1.28  2003/12/03 14:28:22  kuznets
  193. * Added driver name constant.
  194. *
  195. * Revision 1.27  2003/12/02 16:17:42  kuznets
  196. * Added plugin manager support for CReader interface and implementaions
  197. * (id1 reader, pubseq reader)
  198. *
  199. * Revision 1.26  2003/11/26 17:55:53  vasilche
  200. * Implemented ID2 split in ID1 cache.
  201. * Fixed loading of splitted annotations.
  202. *
  203. * Revision 1.25  2003/10/24 13:27:40  vasilche
  204. * Cached ID1 reader made more safe. Process errors and exceptions correctly.
  205. * Cleaned statistics printing methods.
  206. *
  207. * Revision 1.24  2003/10/21 16:32:50  vasilche
  208. * Cleaned ID1 statistics messages.
  209. * Now by setting GENBANK_ID1_STATS=1 CId1Reader collects and displays stats.
  210. * And by setting GENBANK_ID1_STATS=2 CId1Reader logs all activities.
  211. *
  212. * Revision 1.23  2003/10/21 14:27:34  vasilche
  213. * Added caching of gi -> sat,satkey,version resolution.
  214. * SNP blobs are stored in cache in preprocessed format (platform dependent).
  215. * Limit number of connections to GenBank servers.
  216. * Added collection of ID1 loader statistics.
  217. *
  218. * Revision 1.22  2003/10/14 18:31:53  vasilche
  219. * Added caching support for SNP blobs.
  220. * Added statistics collection of ID1 connection.
  221. *
  222. * Revision 1.21  2003/10/08 14:16:12  vasilche
  223. * Added version of blobs loaded from ID1.
  224. *
  225. * Revision 1.20  2003/10/01 18:06:58  kuznets
  226. * x_ReceiveSNPAnnot made public
  227. *
  228. * Revision 1.19  2003/10/01 16:54:50  kuznets
  229. * Relaxed scope restriction of CId1Reader::x_SendRequest() (private->protected)
  230. *
  231. * Revision 1.18  2003/09/30 19:38:26  vasilche
  232. * Added support for cached id1 reader.
  233. *
  234. * Revision 1.17  2003/09/30 16:21:59  vasilche
  235. * Updated internal object manager classes to be able to load ID2 data.
  236. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  237. * Scope caches results of requests for data to data loaders.
  238. * Optimized CSeq_id_Handle for gis.
  239. * Optimized bioseq lookup in scope.
  240. * Reduced object allocations in annotation iterators.
  241. * CScope is allowed to be destroyed before other objects using this scope are
  242. * deleted (feature iterators, bioseq handles etc).
  243. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  244. * Added 'adaptive' option to objmgr_demo application.
  245. *
  246. * Revision 1.16  2003/06/02 16:01:36  dicuccio
  247. * Rearranged include/objects/ subtree.  This includes the following shifts:
  248. *     - include/objects/alnmgr --> include/objtools/alnmgr
  249. *     - include/objects/cddalignview --> include/objtools/cddalignview
  250. *     - include/objects/flat --> include/objtools/flat
  251. *     - include/objects/objmgr/ --> include/objmgr/
  252. *     - include/objects/util/ --> include/objmgr/util/
  253. *     - include/objects/validator --> include/objtools/validator
  254. *
  255. * Revision 1.15  2003/04/24 16:12:37  vasilche
  256. * Object manager internal structures are splitted more straightforward.
  257. * Removed excessive header dependencies.
  258. *
  259. * Revision 1.14  2003/04/15 14:24:07  vasilche
  260. * Changed CReader interface to not to use fake streams.
  261. *
  262. * Revision 1.13  2003/03/26 16:11:06  vasilche
  263. * Removed redundant const modifier from integral return types.
  264. *
  265. * Revision 1.12  2003/03/01 22:26:07  kimelman
  266. * performance fixes
  267. *
  268. * Revision 1.11  2003/02/04 16:02:22  dicuccio
  269. * Moved headers unecessarily included here into the .cpp file
  270. *
  271. * Revision 1.10  2002/12/26 20:51:35  dicuccio
  272. * Added Win32 export specifier
  273. *
  274. * Revision 1.9  2002/07/08 20:50:56  grichenk
  275. * Moved log to the end of file
  276. * Replaced static mutex (in CScope, CDataSource) with the mutex
  277. * pool. Redesigned CDataSource data locking.
  278. *
  279. * Revision 1.8  2002/05/06 03:30:36  vakatov
  280. * OM/OM1 renaming
  281. *
  282. * Revision 1.7  2002/05/03 21:28:02  ucko
  283. * Introduce T(Signed)SeqPos.
  284. *
  285. * Revision 1.6  2002/03/27 20:22:32  butanaev
  286. * Added connection pool.
  287. *
  288. * Revision 1.5  2002/03/26 18:48:31  butanaev
  289. * Fixed bug not deleting streambuf.
  290. *
  291. * Revision 1.4  2002/03/21 19:14:52  kimelman
  292. * GB related bugfixes
  293. *
  294. * Revision 1.3  2002/03/21 01:34:51  kimelman
  295. * gbloader related bugfixes
  296. *
  297. * Revision 1.2  2002/03/20 04:50:35  kimelman
  298. * GB loader added
  299. *
  300. * Revision 1.1  2002/01/11 19:04:03  gouriano
  301. * restructured objmgr
  302. *
  303. * Revision 1.6  2001/12/13 00:20:55  kimelman
  304. * bugfixes:
  305. *
  306. * Revision 1.5  2001/12/12 21:43:47  kimelman
  307. * more meaningfull Compare
  308. *
  309. * Revision 1.4  2001/12/10 20:07:24  butanaev
  310. * Code cleanup.
  311. *
  312. * Revision 1.3  2001/12/07 21:25:19  butanaev
  313. * Interface development, code beautyfication.
  314. *
  315. * Revision 1.2  2001/12/07 17:02:06  butanaev
  316. * Fixed includes.
  317. *
  318. * Revision 1.1  2001/12/07 16:11:45  butanaev
  319. * Switching to new reader interfaces.
  320. *
  321. * Revision 1.2  2001/12/06 18:06:22  butanaev
  322. * Ported to linux.
  323. *
  324. * Revision 1.1  2001/12/06 14:35:23  butanaev
  325. * New streamable interfaces designed, ID1 reimplemented.
  326. *
  327. */
  328. #endif // READER_ID1__HPP_INCLUDED