⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 feature_item.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: feature_item.hpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:39:30  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.16 * PRODUCTION * =========================================================================== */#ifndef OBJTOOLS_FORMAT_ITEMS___FLAT_FEATURE__HPP#define OBJTOOLS_FORMAT_ITEMS___FLAT_FEATURE__HPP/*  $Id: feature_item.hpp,v 1000.1 2004/06/01 19:39:30 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Author:  Aaron Ucko, NCBI*          Mati Shomrat** File Description:*   new (early 2003) flat-file generator -- representation of features*   (mainly of interest to implementors)**/#include <corelib/ncbistd.hpp>#include <corelib/ncbiobj.hpp>#include <objmgr/feat_ci.hpp>#include <objtools/format/items/flat_qual_slots.hpp>#include <objtools/format/items/qualifiers.hpp>#include <objtools/format/formatter.hpp>#include <objtools/format/text_ostream.hpp>#include <objtools/format/items/item_base.hpp>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)class CFeatHeaderItem : public CFlatItem{public:    CFeatHeaderItem(CBioseqContext& ctx);    void Format(IFormatter& formatter,        IFlatTextOStream& text_os) const {        formatter.FormatFeatHeader(*this, text_os);    }    const CSeq_id& GetId(void) const { return *m_Id; }  // for FTable formatprivate:    void x_GatherInfo(CBioseqContext& ctx);    // data    CConstRef<CSeq_id>  m_Id;  // for FTable format};class CFlatFeature : public CObject{public:    CFlatFeature(const string& key, const CFlatSeqLoc& loc, const CSeq_feat& feat)        : m_Key(key), m_Loc(&loc), m_Feat(&feat) { }    typedef vector<CRef<CFormatQual> > TQuals;    const string&      GetKey  (void) const { return m_Key;   }    const CFlatSeqLoc& GetLoc  (void) const { return *m_Loc;  }    const TQuals&      GetQuals(void) const { return m_Quals; }    const CSeq_feat&   GetFeat (void) const { return *m_Feat; }    TQuals& SetQuals(void) { return m_Quals; }private:    string                  m_Key;    CConstRef<CFlatSeqLoc>  m_Loc;    TQuals                  m_Quals;    CConstRef<CSeq_feat>    m_Feat;};class CFeatureItemBase : public CFlatItem{public:    CConstRef<CFlatFeature> Format(void) const;    void Format(IFormatter& formatter, IFlatTextOStream& text_os) const {        formatter.FormatFeature(*this, text_os);    }    bool operator<(const CFeatureItemBase& f2) const {        return m_Feat->Compare(*f2.m_Feat, GetLoc(), f2.GetLoc()) < 0;     }    const CSeq_feat& GetFeat(void)  const { return *m_Feat; }    const CSeq_loc&  GetLoc(void)   const { return *m_Loc; }    virtual string GetKey(void) const {         return m_Feat->GetData().GetKey(CSeqFeatData::eVocabulary_genbank);    }protected:    // constructor    CFeatureItemBase(const CSeq_feat& feat, CBioseqContext& ctx,                     const CSeq_loc* loc = 0);    virtual void x_AddQuals(CBioseqContext& ctx) = 0;    virtual void x_FormatQuals(CFlatFeature& ff) const = 0;    CConstRef<CSeq_feat>    m_Feat;    CConstRef<CSeq_loc>     m_Loc;};class CFeatureItem : public CFeatureItemBase{public:    enum EMapped    {        eMapped_not_mapped,        eMapped_from_genomic,        eMapped_from_cdna,        eMapped_from_prot    };    // constructors    CFeatureItem(const CSeq_feat& feat, CBioseqContext& ctx,        const CSeq_loc* loc, EMapped mapped = eMapped_not_mapped);    // fetaure key (name)    string GetKey(void) const;    // mapping    bool IsMapped           (void) const { return m_Mapped != eMapped_not_mapped;   }    bool IsMappedFromGenomic(void) const { return m_Mapped == eMapped_from_genomic; }    bool IsMappedFromCDNA   (void) const { return m_Mapped == eMapped_from_cdna;    }    bool IsMappedFromProt   (void) const { return m_Mapped == eMapped_from_prot;    }private:    void x_GatherInfo(CBioseqContext& ctx);    //void x_FixLocation(CBioseqContext& ctx);    // qualifier collection    void x_AddQuals(CBioseqContext& ctx);    void x_AddQuals(const CCdregion& cds)  const;    void x_AddQuals(const CProt_ref& prot) const;    void x_AddGeneQuals(const CSeq_feat& gene, CScope& scope) const;    void x_AddCdregionQuals(const CSeq_feat& cds, CBioseqContext& ctx,        bool& pseudo, bool& had_prot_desc) const;    const CProt_ref* x_AddProteinQuals(CBioseq_Handle& prot) const;    void x_AddProductIdQuals(CBioseq_Handle& prod, EFeatureQualifier slot) const;    void x_AddRnaQuals(const CSeq_feat& feat, CBioseqContext& ctx,        bool& pseudo) const;    void x_AddProtQuals(const CSeq_feat& feat, CBioseqContext& ctx,        bool& pseudo, bool& had_prot_desc, string& precursor_comment) const;    void x_AddRegionQuals(const CSeq_feat& feat, CBioseqContext& ctx) const;    void x_AddQuals(const CGene_ref& gene) const;    void x_AddExtQuals(const CSeq_feat::TExt& ext) const;    void x_AddGoQuals(const CUser_object& uo) const;    void x_AddExceptionQuals(CBioseqContext& ctx) const;    void x_ImportQuals(const CSeq_feat::TQual& quals) const;    void x_CleanQuals(void) const;    const CFlatStringQVal* x_GetStringQual(EFeatureQualifier slot) const;    // feature table quals    typedef vector< CRef<CFormatQual> > TQualVec;    void x_AddFTableQuals(CBioseqContext& ctx) const;    bool x_AddFTableGeneQuals(const CSeqFeatData::TGene& gene) const;    void x_AddFTableRnaQuals(const CSeq_feat& feat, CBioseqContext& ctx) const;    void x_AddFTableCdregionQuals(const CSeq_feat& feat, CBioseqContext& ctx) const;    void x_AddFTableProtQuals(const CSeq_feat& prot) const;    void x_AddFTableRegionQuals(const CSeqFeatData::TRegion& region) const;    void x_AddFTableBondQuals(const CSeqFeatData::TBond& bond) const;    void x_AddFTableSiteQuals(const CSeqFeatData::TSite& site) const;    void x_AddFTablePsecStrQuals(const CSeqFeatData::TPsec_str& psec_str) const;    void x_AddFTablePsecStrQuals(const CSeqFeatData::THet& het) const;    void x_AddFTableBiosrcQuals(const CBioSource& src) const;    void x_AddFTableDbxref(const CSeq_feat::TDbxref& dbxref) const;    void x_AddFTableExtQuals(const CSeq_feat::TExt& ext) const;    void x_AddFTableQual(const string& name, const string& val = kEmptyStr) const {        CFormatQual::EStyle style = val.empty() ? CFormatQual::eEmpty : CFormatQual::eQuoted;        m_FTableQuals.push_back(CRef<CFormatQual>(new CFormatQual(name, val, style)));    }        // typdef    typedef CQualContainer<EFeatureQualifier> TQuals;    typedef TQuals::iterator TQI;    typedef TQuals::const_iterator TQCI;        // qualifiers container    void x_AddQual(EFeatureQualifier slot, const IFlatQVal* value) const {        m_Quals.AddQual(slot, value);    }    void x_RemoveQuals(EFeatureQualifier slot) const {        m_Quals.RemoveQuals(slot);    }    bool x_HasQual(EFeatureQualifier slot) const {         return m_Quals.HasQual(slot);    }    pair<TQCI, TQCI> x_GetQual(EFeatureQualifier slot) const {        return const_cast<const TQuals&>(m_Quals).GetQuals(slot);    }    void x_DropIllegalQuals(void) const;    // format    void x_FormatQuals(CFlatFeature& ff) const;    void x_FormatNoteQuals(CFlatFeature& ff) const;    void x_FormatQual(EFeatureQualifier slot, const string& name,        CFlatFeature::TQuals& qvec, IFlatQVal::TFlags flags = 0) const;    void x_FormatNoteQual(EFeatureQualifier slot, const string& name,         CFlatFeature::TQuals& qvec, IFlatQVal::TFlags flags = 0) const         { x_FormatQual(slot, name, qvec, flags | IFlatQVal::fIsNote); }    // data    mutable CSeqFeatData::ESubtype m_Type;    mutable TQuals                 m_Quals;    mutable TQualVec               m_FTableQuals;    EMapped                        m_Mapped;};class CSourceFeatureItem : public CFeatureItemBase{public:    typedef CRange<TSeqPos> TRange;    CSourceFeatureItem(const CBioSource& src, TRange range, CBioseqContext& ctx);    CSourceFeatureItem(const CSeq_feat& feat, CBioseqContext& ctx,                           const CSeq_loc* loc = 0)        : CFeatureItemBase(feat, ctx, loc), m_WasDesc(false)    {        x_GatherInfo(ctx);    }    CSourceFeatureItem(const CMappedFeat& feat, CBioseqContext& ctx,                           const CSeq_loc* loc = 0)        : CFeatureItemBase(feat.GetOriginalFeature(), ctx,                           loc ? loc : &feat.GetLocation()),          m_WasDesc(false)    {        x_GatherInfo(ctx);    }    bool WasDesc(void) const { return m_WasDesc; }    const CBioSource& GetSource(void) const {        return m_Feat->GetData().GetBiosrc();    }    string GetKey(void) const { return "source"; }private:    void x_GatherInfo(CBioseqContext& ctx) {        x_AddQuals(ctx);    }    void x_AddQuals(CBioseqContext& ctx);    void x_AddQuals(const CBioSource& src, CBioseqContext& ctx) const;    void x_AddQuals(const COrg_ref& org, CBioseqContext& ctx) const;    // XXX - massage slot as necessary and perhaps sanity-check value's type    void x_AddQual (ESourceQualifier slot, const IFlatQVal* value) const {        m_Quals.AddQual(slot, value);     }    void x_FormatQuals(CFlatFeature& ff) const;    void x_FormatGBNoteQuals(CFlatFeature& ff) const;    void x_FormatNoteQuals(CFlatFeature& ff) const;    void x_FormatQual(ESourceQualifier slot, const string& name,        CFlatFeature::TQuals& qvec, IFlatQVal::TFlags flags = 0) const {            bool add_period = false;            x_FormatQual(slot, name, qvec, add_period, flags);    }    void x_FormatQual(ESourceQualifier slot, const string& name,        CFlatFeature::TQuals& qvec, bool& add_period,        IFlatQVal::TFlags flags = 0) const;    void x_FormatNoteQual(ESourceQualifier slot, const string& name,            CFlatFeature::TQuals& qvec, bool& add_period,            IFlatQVal::TFlags flags = 0) const {        x_FormatQual(slot, name, qvec, add_period, flags | IFlatQVal::fIsNote);     }    typedef CQualContainer<ESourceQualifier> TQuals;    typedef TQuals::const_iterator           TQCI;    bool           m_WasDesc;    mutable TQuals m_Quals;};END_SCOPE(objects)END_NCBI_SCOPE/** ===========================================================================** $Log: feature_item.hpp,v $* Revision 1000.1  2004/06/01 19:39:30  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.16** Revision 1.16  2004/05/19 14:42:38  shomrat* + x_DropIllegalQuals** Revision 1.15  2004/05/07 15:21:50  shomrat* + Helper function x_GetStringQual(..)** Revision 1.14  2004/05/06 17:41:38  shomrat* Fixes to feature formatting** Revision 1.13  2004/04/22 15:36:00  shomrat* Changes in context** Revision 1.12  2004/04/13 16:42:24  shomrat* Additions due to GBSeq format** Revision 1.11  2004/04/07 14:25:03  shomrat* Added FTable format methods** Revision 1.10  2004/03/31 15:59:54  ucko* CFeatureItem::x_GetQual: make sure to call the const version of* GetQuals to fix WorkShop build errors.** Revision 1.9  2004/03/30 20:26:32  shomrat* Separated quals container from feature class** Revision 1.8  2004/03/25 20:27:52  shomrat* moved constructor body to .cpp file** Revision 1.7  2004/03/18 15:27:25  shomrat* + GetId for ftable format** Revision 1.6  2004/03/08 21:00:48  shomrat* Exception qualifiers gathering** Revision 1.5  2004/03/05 18:49:26  shomrat* enhancements to qualifier collection and formatting** Revision 1.4  2004/02/11 22:48:18  shomrat* override GetKey** Revision 1.3  2004/02/11 16:38:51  shomrat* added methods for gathering and formatting of source features** Revision 1.2  2004/01/14 15:57:23  shomrat* removed commented code** Revision 1.1  2003/12/17 19:46:43  shomrat* Initial revision (adapted from flat lib)*** ===========================================================================*/#endif  /* OBJTOOLS_FORMAT_ITEMS___FLAT_FEATURE__HPP */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -