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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: flat_items.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:59:29  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_FLAT___FLAT_ITEMS__HPP
  10. #define OBJECTS_FLAT___FLAT_ITEMS__HPP
  11. /*  $Id: flat_items.hpp,v 1000.0 2003/10/29 20:59:29 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author:  Aaron Ucko, NCBI
  37. *
  38. * File Description:
  39. *   new (early 2003) flat-file generator -- item types
  40. *   (mainly of interest to implementors)
  41. *
  42. */
  43. // Complex enough to get their own headers
  44. // (flat_reference.hpp already included indirectly)
  45. #include <objtools/flat/flat_head.hpp>
  46. #include <objtools/flat/flat_feature.hpp>
  47. #include <objects/general/User_object.hpp>
  48. #include <objects/seqloc/Seq_id.hpp>
  49. BEGIN_NCBI_SCOPE
  50. BEGIN_SCOPE(objects)
  51. class CFlatForehead : public IFlatItem
  52. {
  53. public:
  54.     CFlatForehead(CFlatContext& ctx) : m_Context(&ctx) { }
  55.     void Format(IFlatFormatter& f) const { f.BeginSequence(*m_Context); }
  56. private:
  57.     mutable CRef<CFlatContext> m_Context;
  58. };
  59. // CFlatHead split into flat_head.hpp
  60. class CFlatKeywords : public IFlatItem
  61. {
  62. public:
  63.     CFlatKeywords(const CFlatContext& ctx);
  64.     void Format(IFlatFormatter& f) const { f.FormatKeywords(*this); }
  65.     const list<string>& GetKeywords(void) const { return m_Keywords; }
  66. private:
  67.     list<string> m_Keywords;
  68. };
  69. class CFlatSegment : public IFlatItem
  70. {
  71. public:
  72.     CFlatSegment(const CFlatContext& ctx)
  73.         : m_Num(ctx.GetSegmentNum()), m_Count(ctx.GetSegmentCount()) { }
  74.     void Format(IFlatFormatter& f) const { f.FormatSegment(*this); }
  75.     unsigned int GetNum  (void) const { return m_Num;   }
  76.     unsigned int GetCount(void) const { return m_Count; }
  77. private:
  78.     unsigned int m_Num, m_Count;
  79. };
  80. // SOURCE/ORGANISM, not source feature
  81. class CFlatSource : public IFlatItem
  82. {
  83. public:
  84.     CFlatSource(const CFlatContext& ctx);
  85.     void Format(IFlatFormatter& f) const { f.FormatSource(*this); }
  86.     string GetTaxonomyURL(void) const;
  87.     int             GetTaxID     (void) const { return m_TaxID;       }
  88.     const string&   GetFormalName(void) const { return m_FormalName;  }
  89.     const string&   GetCommonName(void) const { return m_FormalName;  }
  90.     const string&   GetLineage   (void) const { return m_Lineage;     }
  91.     const CSeqdesc& GetDescriptor(void) const { return *m_Descriptor; }
  92. private:
  93.     int                 m_TaxID;
  94.     string              m_FormalName;
  95.     string              m_CommonName;
  96.     string              m_Lineage; // semicolon-delimited
  97.     CConstRef<CSeqdesc> m_Descriptor;
  98. };
  99. // CFlatReference split into flat_reference.hpp
  100. class CFlatComment : public IFlatItem
  101. {
  102. public:
  103.     CFlatComment(const CFlatContext& ctx);
  104.     void Format(IFlatFormatter& f) const { f.FormatComment(*this); }
  105.     const string& GetComment(void) const { return m_Comment; }
  106. private:
  107.     string m_Comment;
  108. };
  109. class CFlatPrimary : public IFlatItem
  110. {
  111. public:
  112.     CFlatPrimary(const CFlatContext& ctx);
  113.     void Format(IFlatFormatter& f) const { f.FormatPrimary(*this); }
  114.     typedef CRange<TSeqPos> TRange;
  115.     struct SPiece {
  116.         TRange             m_Span;
  117.         CConstRef<CSeq_id> m_PrimaryID;
  118.         TRange             m_PrimarySpan;
  119.         bool               m_Complemented;
  120.         // for usual tabular format (even incorporated in GBSet!)
  121.         string& Format(string &s) const;
  122.     };
  123.     typedef list<SPiece> TPieces;
  124.     // for usual tabular format (even incorporated in GBSet!)
  125.     const char*    GetHeader(void) const;
  126.     const TPieces& GetPieces(void) const { return m_Pieces; }
  127. private:
  128.     bool    m_IsRefSeq;
  129.     TPieces m_Pieces;
  130. };
  131. // no actual data needed
  132. class CFlatFeatHeader : public IFlatItem
  133. {
  134. public:
  135.     CFlatFeatHeader() { }
  136.     void Format(IFlatFormatter& f) const { f.FormatFeatHeader(*this); }
  137. };
  138. // CFlatFeature, CFlattishFeature, etc. split into flat_feature.hpp
  139. class CFlatDataHeader : public IFlatItem
  140. {
  141. public:
  142.     CFlatDataHeader(const CFlatContext& ctx)
  143.         : m_Loc(&ctx.GetLocation()), m_Handle(ctx.GetHandle()),
  144.           m_IsProt(ctx.IsProt()),
  145.           m_As(0), m_Cs(0), m_Gs(0), m_Ts(0), m_Others(0)
  146.         { }
  147.     void Format(IFlatFormatter& f) const
  148.         { f.FormatDataHeader(*this); }
  149.     void GetCounts(TSeqPos& a, TSeqPos& c, TSeqPos& g, TSeqPos& t,
  150.                    TSeqPos& other) const;
  151. private:
  152.     CConstRef<CSeq_loc> m_Loc;
  153.     CBioseq_Handle      m_Handle;
  154.     bool                m_IsProt;
  155.     mutable TSeqPos     m_As, m_Cs, m_Gs, m_Ts, m_Others;
  156. };
  157. class CFlatData : public IFlatItem
  158. {
  159. public:
  160.     CFlatData(const CFlatContext& ctx) : m_Loc(&ctx.GetLocation()) { }
  161.     void Format(IFlatFormatter& f) const { f.FormatData(*this); }
  162.     const CSeq_loc& GetLoc(void) const { return *m_Loc; }
  163. private:
  164.     CConstRef<CSeq_loc> m_Loc;
  165. };
  166. class CFlatContig : public IFlatItem
  167. {
  168. public:
  169.     CFlatContig(const CFlatContext& ctx) : m_Loc(&ctx.GetLocation()) { }
  170.     void Format(IFlatFormatter& f) const { f.FormatContig(*this); }
  171.     const CSeq_loc& GetLoc(void) const { return *m_Loc; }
  172. private:
  173.     CConstRef<CSeq_loc> m_Loc;
  174. };
  175. class CFlatWGSRange : public IFlatItem
  176. {
  177. public:
  178.     CFlatWGSRange(const CFlatContext& ctx);
  179.     void Format(IFlatFormatter& f) const { f.FormatWGSRange(*this); }
  180.     const string&       GetFirstID   (void) const { return m_First; }
  181.     const string&       GetLastID    (void) const { return m_Last;  }
  182.     const CUser_object& GetUserObject(void) const { return *m_UO;   }
  183. private:
  184.     string                  m_First, m_Last; // IDs in range
  185.     CConstRef<CUser_object> m_UO;
  186. };
  187. class CFlatGenomeInfo : public IFlatItem
  188. {
  189. public:
  190.     CFlatGenomeInfo(const CFlatContext& ctx);
  191.     void Format(IFlatFormatter& f) const { f.FormatGenomeInfo(*this); }
  192.     const string&       GetAccession (void) const { return *m_Accession; }
  193.     const string&       GetMoltype   (void) const
  194.         { return m_Moltype ? *m_Moltype : kEmptyStr; }
  195.     const CUser_object& GetUserObject(void) const { return *m_UO;        }
  196. private:
  197.     const string*           m_Accession;
  198.     const string*           m_Moltype; // stored as a string in the ASN.1
  199.     CConstRef<CUser_object> m_UO;
  200. };
  201. // no actual data needed
  202. class CFlatTail : public IFlatItem
  203. {
  204. public:
  205.     CFlatTail() { }
  206.     void Format(IFlatFormatter& f) const { f.EndSequence(); }
  207. };
  208. ///////////////////////////////////////////////////////////////////////////
  209. //
  210. // INLINE METHODS
  211. inline
  212. string CFlatSource::GetTaxonomyURL(void) const {
  213.     return "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id="
  214.         + NStr::IntToString(m_TaxID);
  215. }
  216. END_SCOPE(objects)
  217. END_NCBI_SCOPE
  218. /*
  219. * ===========================================================================
  220. *
  221. * $Log: flat_items.hpp,v $
  222. * Revision 1000.0  2003/10/29 20:59:29  gouriano
  223. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6
  224. *
  225. * Revision 1.6  2003/09/19 00:22:45  ucko
  226. * CFlatPrimary: use an unsigned range per CAlnMap::GetSeqRange's new rettype.
  227. *
  228. * Revision 1.5  2003/06/02 16:01:39  dicuccio
  229. * Rearranged include/objects/ subtree.  This includes the following shifts:
  230. *     - include/objects/alnmgr --> include/objtools/alnmgr
  231. *     - include/objects/cddalignview --> include/objtools/cddalignview
  232. *     - include/objects/flat --> include/objtools/flat
  233. *     - include/objects/objmgr/ --> include/objmgr/
  234. *     - include/objects/util/ --> include/objmgr/util/
  235. *     - include/objects/validator --> include/objtools/validator
  236. *
  237. * Revision 1.4  2003/04/10 20:08:22  ucko
  238. * Arrange to pass the item as an argument to IFlatTextOStream::AddParagraph
  239. *
  240. * Revision 1.3  2003/03/21 18:47:47  ucko
  241. * Turn most structs into (accessor-requiring) classes; replace some
  242. * formerly copied fields with pointers to the original data.
  243. *
  244. * Revision 1.2  2003/03/10 22:05:13  ucko
  245. * -SFlatKeywords::x_AddKeys (MSVC didn't like it :-/)
  246. *
  247. * Revision 1.1  2003/03/10 16:39:08  ucko
  248. * Initial check-in of new flat-file generator
  249. *
  250. *
  251. * ===========================================================================
  252. */
  253. #endif  /* OBJECTS_FLAT___FLAT_ITEMS__HPP */