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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: gff_formatter.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:38:58  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJTOOLS_FORMAT___GFF_FORMATTER__HPP
  10. #define OBJTOOLS_FORMAT___GFF_FORMATTER__HPP
  11. /*  $Id: gff_formatter.hpp,v 1000.1 2004/06/01 19:38:58 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. *          Mati Shomrat
  38. *
  39. * File Description:
  40. *
  41. */
  42. /// @file flat_gff_formatter.hpp
  43. /// Flat formatter for Generic Feature Format (incl. Gene Transfer Format)
  44. ///
  45. /// These formats are somewhat loosely defined (for the record, at
  46. /// http://www.sanger.ac.uk/Software/formats/GFF/GFF_Spec.shtml and
  47. /// http://genes.cs.wustl.edu/GTF2.html respectively) so we default to
  48. /// GenBank/DDBJ/EMBL keys and qualifiers except as needed for GTF
  49. /// compatibility.
  50. #include <corelib/ncbistd.hpp>
  51. #include <objects/seqfeat/Seq_feat.hpp>
  52. #include <objtools/format/item_formatter.hpp>
  53. /** @addtogroup Miscellaneous
  54.  *
  55.  * @{
  56.  */
  57. BEGIN_NCBI_SCOPE
  58. BEGIN_SCOPE(objects)
  59. class CFlatFeature;
  60. class CGFFFormatter : public CFlatItemFormatter
  61. {
  62. public:
  63.     enum EGFFFlags {
  64.         fGTFCompat = 0x1, ///< Represent CDSs (and exons) per GTF.
  65.         fGTFOnly   = 0x3, ///< Omit all other features.
  66.         fShowSeq   = 0x4, ///< Show the actual sequence in a "##" comment.
  67.     };
  68.     typedef int TGFFFlags; ///< Binary OR of EGFFFlags
  69.     CGFFFormatter(void);
  70.     virtual void Start       (IFlatTextOStream& text_os);
  71.     virtual void StartSection(const CStartSectionItem&, IFlatTextOStream& text_os);
  72.     virtual void EndSection  (const CEndSectionItem&, IFlatTextOStream& text_os);
  73.     virtual void FormatLocus(const CLocusItem& locus, IFlatTextOStream& text_os);
  74.     virtual void FormatDate(const CDateItem& date, IFlatTextOStream& text_os);
  75.     virtual void FormatFeature(const CFeatureItemBase& feat, IFlatTextOStream& text_os);
  76.     virtual void FormatBasecount(const CBaseCountItem& bc, IFlatTextOStream& text_os);
  77.     virtual void FormatSequence(const CSequenceItem& seq, IFlatTextOStream& text_os);
  78. private:
  79.     string x_GetGeneID(const CFlatFeature& feat, const string& gene_name, CBioseqContext& ctx) const;
  80.     string x_GetTranscriptID(const CFlatFeature& feat, const string& gene_id, CBioseqContext& ctx) const;
  81.     string x_GetSourceName(CBioseqContext& ctx) const;
  82.     void   x_AddFeature(list<string>& l, const CSeq_loc& loc,
  83.                         const string& source, const string& key,
  84.                         const string& score, int frame, const string& attrs,
  85.                         bool gtf, CBioseqContext& ctx,
  86.                         bool tentative_stop = false) const;
  87.     mutable TGFFFlags           m_GFFFlags;
  88.     //CRef<IFlatTextOStream> m_Stream;
  89.     mutable string              m_SeqType;
  90.     mutable string              m_EndSequence;
  91.     /// Taken from head
  92.     mutable string              m_Date;
  93.     mutable CSeq_inst::TStrand  m_Strandedness;
  94.     typedef vector<CConstRef<CSeq_feat> > TFeatVec;
  95.     mutable map<string, TFeatVec>  m_Genes;
  96.     mutable map<string, TFeatVec>  m_Transcripts;
  97. };
  98. END_SCOPE(objects)
  99. END_NCBI_SCOPE
  100. /* @} */
  101. /*
  102. * ===========================================================================
  103. *
  104. * $Log: gff_formatter.hpp,v $
  105. * Revision 1000.1  2004/06/01 19:38:58  gouriano
  106. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  107. *
  108. * Revision 1.3  2004/05/08 12:13:56  dicuccio
  109. * Added x_GetTranscripID() for handling transcript IDs
  110. *
  111. * Revision 1.2  2004/04/22 15:45:57  shomrat
  112. * Changes in context
  113. *
  114. * Revision 1.1  2004/01/14 15:59:50  shomrat
  115. * Initial Revision
  116. *
  117. *
  118. * ===========================================================================
  119. */
  120. #endif  /* OBJTOOLS_FORMAT___GFF_FORMATTER__HPP */