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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: gff_reader.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:40:36  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJTOOLS_READERS___GFF_READER__HPP
  10. #define OBJTOOLS_READERS___GFF_READER__HPP
  11. /*  $Id: gff_reader.hpp,v 1000.1 2004/06/01 19:40:36 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.  * Authors:  Aaron Ucko, Wratko Hlavina
  37.  *
  38.  */
  39. /// @file gff_reader.hpp
  40. /// Reader for GFF (including GTF) files.
  41. ///
  42. /// These formats are somewhat loosely defined (for the record, at
  43. /// http://www.sanger.ac.uk/Software/formats/GFF/GFF_Spec.shtml and
  44. /// http://genes.cs.wustl.edu/GTF2.html respectively).  As such, the
  45. /// reader allows heavy application-specific tuning, both via flags
  46. /// and via virtual methods.
  47. #include <corelib/ncbiutil.hpp>
  48. #include <util/range_coll.hpp>
  49. #include <objects/seq/Bioseq.hpp>
  50. #include <objects/seqfeat/Seq_feat.hpp>
  51. #include <objects/seqloc/Seq_id.hpp>
  52. #include <objects/seqloc/Seq_loc.hpp>
  53. #include <objects/seqset/Seq_entry.hpp>
  54. #include <objtools/readers/reader_exception.hpp>
  55. #include <set>
  56. BEGIN_NCBI_SCOPE
  57. BEGIN_SCOPE(objects)
  58. /** @addtogroup Miscellaneous
  59.  *
  60.  * @{
  61.  */
  62. class NCBI_XOBJREAD_EXPORT CGFFReader
  63. {
  64. public:
  65.     enum EFlags {
  66.         fNoGTF      = 0x1, // don't honor/recognize GTF conventions
  67.         fGBQuals    = 0x2, // attribute tags are GenBank qualifiers
  68.         fMergeExons = 0x4  // merge exons with the same transcript_id
  69.     };
  70.     typedef int TFlags;
  71.     virtual ~CGFFReader() { }
  72.     CRef<CSeq_entry> Read(CNcbiIstream& in, TFlags flags = 0);
  73.     struct SRecord : public CObject
  74.     {
  75.         struct SSubLoc
  76.         {
  77.             string         accession;
  78.             ENa_strand     strand;
  79.             set<TSeqRange> ranges;
  80.         };
  81.         typedef set<vector<string> > TAttrs;
  82.         typedef vector<SSubLoc>      TLoc;
  83.         TLoc         loc;       ///< from accession, start, stop, strand
  84.         string       source;
  85.         string       key;
  86.         string       score;
  87.         int          frame;     ///< 0-based; . maps to -1.
  88.         TAttrs       attrs;
  89.         unsigned int line_no;
  90.         TAttrs::const_iterator FindAttribute(const string& name,
  91.                                              size_t min_values = 1) const;
  92.     };
  93. protected:
  94.     virtual void            x_Warn(const string& message,
  95.                                    unsigned int line = 0);
  96.     /// Reset all state, since we're between streams.
  97.     virtual void            x_Reset(void);
  98.     TFlags                  x_GetFlags(void) const { return m_Flags; }
  99.     bool                    x_GetNextLine(string& line);
  100.     unsigned int            x_GetLineNumber(void) { return m_LineNumber; }
  101.     virtual void            x_ParseStructuredComment(const string& line);
  102.     virtual void            x_ParseDateComment(const string& date);
  103.     virtual void            x_ParseTypeComment(const string& moltype,
  104.                                                const string& seqname);
  105.     virtual CRef<SRecord>   x_ParseFeatureInterval(const string& line);
  106.     virtual CRef<SRecord>   x_NewRecord(void)
  107.         { return CRef<SRecord>(new SRecord); }
  108.     virtual CRef<CSeq_feat> x_ParseRecord(const SRecord& record);
  109.     virtual CRef<CSeq_loc>  x_ResolveLoc(const SRecord::TLoc& loc);
  110.     virtual void            x_AddAttribute(SRecord& record,
  111.                                            vector<string>& attr);
  112.     /// Returning the empty string indicates that record constitutes
  113.     /// an entire feature.  Returning anything else requests merging
  114.     /// with other records that yield the same ID.
  115.     virtual string          x_FeatureID(const SRecord& record);
  116.     virtual void            x_MergeRecords(SRecord& dest, const SRecord& src);
  117.     virtual void            x_MergeAttributes(SRecord& dest,
  118.                                               const SRecord& src);
  119.     virtual void            x_PlaceFeature(CSeq_feat& feat,
  120.                                            const SRecord& record);
  121.     /// Falls back to x_ResolveNewSeqName on cache misses.
  122.     virtual CRef<CSeq_id>   x_ResolveSeqName(const string& name);
  123.     virtual CRef<CSeq_id>   x_ResolveNewSeqName(const string& name);
  124.     /// Falls back to x_ResolveNewID on cache misses.
  125.     virtual CRef<CBioseq>   x_ResolveID(const CSeq_id& id, const string& mol);
  126.     /// The base version just constructs a shell so as not to depend
  127.     /// on the object manager, but derived versions may consult it.
  128.     virtual CRef<CBioseq>   x_ResolveNewID(const CSeq_id& id,
  129.                                            const string& mol);
  130.     virtual void            x_PlaceSeq(CBioseq& seq);
  131. private:
  132.     typedef map<string, CRef<CSeq_id>, PNocase>    TSeqNameCache;
  133.     typedef map<CConstRef<CSeq_id>, CRef<CBioseq>,
  134.                 PPtrLess<CConstRef<CSeq_id> > >    TSeqCache;
  135.     typedef map<string, CRef<SRecord>, PNocase>    TDelayedFeats;
  136.     CRef<CSeq_entry> m_TSE;
  137.     TSeqNameCache    m_SeqNameCache;
  138.     TSeqCache        m_SeqCache;
  139.     TDelayedFeats    m_DelayedFeats;
  140.     string           m_DefMol;
  141.     unsigned int     m_LineNumber;
  142.     TFlags           m_Flags;
  143.     CNcbiIstream*    m_Stream;
  144. };
  145. END_SCOPE(objects)
  146. END_NCBI_SCOPE
  147. /* @} */
  148. /*
  149.  * ===========================================================================
  150.  * $Log: gff_reader.hpp,v $
  151.  * Revision 1000.1  2004/06/01 19:40:36  gouriano
  152.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  153.  *
  154.  * Revision 1.4  2004/05/08 12:14:16  dicuccio
  155.  * Use set<TRange> instead of CRangeCollection<>
  156.  *
  157.  * Revision 1.3  2004/01/27 17:12:34  ucko
  158.  * Make SRecord public to resolve visibility errors on IBM VisualAge C++.
  159.  *
  160.  * Revision 1.2  2003/12/03 21:03:19  ucko
  161.  * Add Windows export specifier.
  162.  *
  163.  * Revision 1.1  2003/12/03 20:56:19  ucko
  164.  * Initial commit.
  165.  *
  166.  * ===========================================================================
  167.  */
  168. #endif  /* OBJTOOLS_READERS___GFF_READER__HPP */