feature.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:12k
- /*
- * ===========================================================================
- * PRODUCTION $Log: feature.hpp,v $
- * PRODUCTION Revision 1000.0 2004/06/01 19:54:56 gouriano
- * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4
- * PRODUCTION
- * ===========================================================================
- */
- #ifndef GUI_OBJUTILS___FEATURE__HPP
- #define GUI_OBJUTILS___FEATURE__HPP
- /* $Id: feature.hpp,v 1000.0 2004/06/01 19:54:56 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.
- *
- * ===========================================================================
- *
- * Authors: Mike DiCuccio
- *
- * File Description:
- * CLayoutFeat -- utility class to arrange CSeq_feat objects in hierarchical
- * (tree) order.
- */
- #include <corelib/ncbiobj.hpp>
- #include <gui/gui.hpp>
- #include <gui/objutils/layout.hpp>
- #include <objmgr/feat_ci.hpp>
- #include <objects/seqfeat/SeqFeatData.hpp>
- #include <objects/seqfeat/Seq_feat.hpp>
- #include <objects/seqloc/Seq_loc.hpp>
- #include <list>
- /** @addtogroup GUI_OBJUTILS
- *
- * @{
- */
- BEGIN_NCBI_SCOPE
- //
- // Class for storing a set of nested features.
- // A feature describes the genetic location in true gene coordinates of any
- // sort of genetic object (gene / protein / RNA / etc). Each feature has an
- // overall extent as well as a series of subregions
- //
- class NCBI_GUIOBJUTILS_EXPORT CLayoutFeat : public CLayoutObject
- {
- public:
- typedef vector< CRef<CLayoutFeat> > TFeatList;
- // ctors
- CLayoutFeat(const objects::CMappedFeat& feat);
- //
- // pure virtual requirements
- //
- // Access the feature's remapped location
- const objects::CSeq_loc& GetLocation(void) const;
- // Comparators
- bool LessByPos (const CLayoutObject& obj) const;
- bool LessBySize(const CLayoutObject& obj) const;
- // retrieve the type of this object
- EType GetType() const;
- //
- // type-sepcific accessors
- //
- // Retrieve the feature as an object. For safety's sake,
- // this returns the remapped feature.
- const CObject* GetObject(TSeqPos pos) const;
-
- bool HasObject(const CObject* obj) const;
- // Access the original feature. The location on this feature
- // may not be correct, as it hasn't been remapped
- const objects::CSeq_feat& GetFeature(void) const;
- // Access a new, fully remapped feature
- // This is useful for passing exact features to plugins
- const objects::CMappedFeat& GetMappedFeature(void) const;
- // Access the size of this feature
- TSeqPos size(void) const;
- // Access the sub-intervals in this feature
- const vector<TSeqRange>& GetIntervals(void) const;
- // Access a text string describing this feature
- //const string& GetTextId(void) const;
- // Accessors for parent-child relationships in features
- const CLayoutFeat* GetParent (void) const;
- const TFeatList& GetChildren(void) const;
- void SetParent(CLayoutFeat* feat);
- TFeatList& SetChildren(void);
- bool IsHiddenLabel(void) const;
- void HideLabels();
- protected:
- // we store a mapped feature object
- objects::CMappedFeat m_Feature;
- bool m_HideLabel;
-
- // parent / child relationships for this feature
- CLayoutFeat* m_Parent;
- TFeatList m_Children;
- // some sort of identifier for this gene
- // this is usually a locus name
- //string m_TextId;
- // individual features in this range
- mutable vector<TSeqRange> m_Intervals;
- // calculate our intervals
- void x_CalcIntervals(void) const;
- };
- //
- // Predicates for sorting gene info
- //
- //
- // SFeatureBySize()
- // arrange features by length of (extent of) feature
- //
- struct NCBI_GUIOBJUTILS_EXPORT SFeatureBySize
- {
- bool operator() (const CLayoutFeat& g0, const CLayoutFeat& g1) const {
- return (g0.size() > g1.size());
- }
- bool operator() (const CLayoutFeat* g0, const CLayoutFeat* g1) const {
- return (g0->size() > g1->size());
- }
- };
- //
- // SFeatureByPos()
- // arrange features by position. in essence, this sorts features as a
- // CSeq_feat is sorted
- //
- struct NCBI_GUIOBJUTILS_EXPORT SFeatureByPos
- {
- bool operator() (const CLayoutFeat& g0, const CLayoutFeat& g1) const {
- return (g0.GetFeature().Compare(g1.GetFeature(),
- g0.GetLocation(),
- g1.GetLocation()) < 0);
- }
- bool operator() (const CLayoutFeat* g0, const CLayoutFeat* g1) const {
- return (*this)(*g0, *g1);
- }
- };
- inline
- bool CLayoutFeat::IsHiddenLabel(void) const
- {
- return m_HideLabel;
- }
- inline
- void CLayoutFeat::HideLabels()
- {
- m_HideLabel = true;
- }
- inline
- const objects::CSeq_feat& CLayoutFeat::GetFeature(void) const
- {
- return m_Feature.GetOriginalFeature();
- }
- inline
- const CObject* CLayoutFeat::GetObject(TSeqPos pos) const
- {
- TSeqRange r = GetLocation().GetTotalRange();
- if (pos >= r.GetFrom() && pos <= r.GetTo()) {
- return &m_Feature.GetOriginalFeature();
- }
- return NULL;
- }
- inline
- bool CLayoutFeat::HasObject(const CObject* obj) const
- {
- return &m_Feature.GetOriginalFeature() == obj;
- }
- inline
- const objects::CMappedFeat& CLayoutFeat::GetMappedFeature(void) const
- {
- return m_Feature;
- }
- inline
- const objects::CSeq_loc& CLayoutFeat::GetLocation(void) const
- {
- return m_Feature.GetLocation();
- }
- inline
- TSeqPos CLayoutFeat::size(void) const
- {
- return GetLocation().GetTotalRange().GetLength();
- }
- // Accessors for parent-child relationships in features
- inline
- const CLayoutFeat* CLayoutFeat::GetParent(void) const
- {
- return m_Parent;
- }
- inline
- const CLayoutFeat::TFeatList& CLayoutFeat::GetChildren(void) const
- {
- return m_Children;
- }
- inline
- void CLayoutFeat::SetParent(CLayoutFeat* feat)
- {
- m_Parent = feat;
- }
- inline
- CLayoutFeat::TFeatList& CLayoutFeat::SetChildren(void)
- {
- return m_Children;
- }
- inline
- bool CLayoutFeat::LessByPos(const CLayoutObject& obj) const
- {
- const CLayoutFeat* feat = dynamic_cast<const CLayoutFeat*>(&obj);
- if (feat) {
- // two features - we sort in feature order
- SFeatureByPos comp;
- return (comp(*this, *feat));
- } else {
- // default: compare by ranges
- TSeqRange r0 = GetLocation().GetTotalRange();
- TSeqRange r1 = obj.GetLocation().GetTotalRange();
- return (r0.GetFrom() < r1.GetFrom());
- }
- }
- inline
- bool CLayoutFeat::LessBySize(const CLayoutObject& obj) const
- {
- TSeqRange r0 = GetLocation().GetTotalRange();
- TSeqRange r1 = obj.GetLocation().GetTotalRange();
- return (r0.GetLength() < r1.GetLength());
- }
- // Access the sub-intervals in this feature
- inline
- const vector<TSeqRange>& CLayoutFeat::GetIntervals(void) const
- {
- if (m_Intervals.size() == 0) {
- x_CalcIntervals();
- }
- return m_Intervals;
- }
- inline
- CLayoutFeat::EType CLayoutFeat::GetType() const
- {
- return eFeat;
- }
- END_NCBI_SCOPE
- /* @} */
- /*
- * ===========================================================================
- * $Log: feature.hpp,v $
- * Revision 1000.0 2004/06/01 19:54:56 gouriano
- * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4
- *
- * Revision 1.4 2004/05/14 14:24:47 dicuccio
- * Added new pure virtual requirement on CLayoutObject(): GetType(), returns enum
- * defined in CLayoutObject
- *
- * Revision 1.3 2004/05/03 13:34:54 dicuccio
- * FIxed include guards, doxygen groups
- *
- * Revision 1.2 2004/05/03 12:41:35 dicuccio
- * Fixed #includes and export specifiers
- *
- * Revision 1.1 2004/04/30 11:52:53 dicuccio
- * Split out from gui/utils
- *
- * Revision 1.24 2004/04/16 14:27:17 dicuccio
- * Added doxygen module tag
- *
- * Revision 1.23 2004/04/15 12:57:43 lebedev
- * Changed GetObject to return NULL or const pointer based on given position
- *
- * Revision 1.22 2004/04/12 16:48:28 dicuccio
- * MOved #include guard
- *
- * Revision 1.21 2004/03/11 17:19:32 dicuccio
- * Use TSeqRange instead of TRange. Use gui/gui instead of gui/types
- *
- * Revision 1.20 2004/02/24 14:34:49 lebedev
- * Option to hide feature label added
- *
- * Revision 1.19 2003/09/30 19:49:26 dicuccio
- * When requesting the object behind a feature, always return the original feature
- * not remapped to another sequence (solves selection issues in graphical widget)
- *
- * Revision 1.18 2003/09/29 15:20:08 dicuccio
- * Deprecated gui/scope.hpp. Merged gui/core/types.hpp into gui/types.hpp
- *
- * Revision 1.17 2003/08/22 15:57:11 dicuccio
- * Removed 'USING_SCOPE(objects)'. Removed export specifier from inline structs
- *
- * Revision 1.16 2003/08/18 14:53:26 dicuccio
- * Changed nales: CFeature -> CLayoutFeat; CAlignment -> CLayoutAlign; CGraph ->
- * CLayoutGraph; CProtProduct -> CLayoutProtProd.
- * Removed USING_SCOPE(objects);
- *
- * Revision 1.15 2003/07/21 19:24:09 dicuccio
- * Changed storage mechanism: CLayoutObject::GetObject() is pure virtual. Also,
- * CFeature now stores a CMappedFeat object instead of a CSeq_feat / CSeq_loc pair
- *
- * Revision 1.14 2003/07/11 15:24:05 dicuccio
- * Fix compilation error for gcc
- *
- * Revision 1.13 2003/07/11 12:40:01 dicuccio
- * Code clean-ups. Fixed sorting of features to perform correct feature-order
- * sorting
- *
- * Revision 1.12 2003/07/11 11:46:58 dicuccio
- * Removed dead code
- *
- * Revision 1.11 2003/06/10 13:32:42 dicuccio
- * Rewored CFeature to inherit from CLayoutObject. Removed a lot fo dead code.
- *
- * Revision 1.10 2003/05/07 17:26:17 dicuccio
- * Removed dead predeclaration; reformatted CVS comments
- *
- * Revision 1.9 2003/05/07 12:30:00 dicuccio
- * Removed CFeature::GetExtent(). Fixed long-standing bug with misreporting of
- * feature locations
- *
- * Revision 1.8 2003/02/25 14:42:48 dicuccio
- * FIxed compilation issue related to API change in CSeq_feat::Compare()
- *
- * Revision 1.7 2003/02/10 18:19:41 dicuccio
- * Fixed compilation errors relating to change in CFeat_CI API
- *
- * Revision 1.6 2003/01/15 20:57:37 dicuccio
- * Dropped private feature sort mechanism in favor of toolkit standard sort.
- *
- * Revision 1.5 2003/01/13 13:11:42 dicuccio
- * Namespace clean-up. Retired namespace gui -> converted to namespace ncbi.
- * Moved all FLUID-generated code into namespace ncbi.
- *
- * Revision 1.4 2002/12/19 18:13:03 dicuccio
- * Added export specifiers for Win32.
- *
- * Revision 1.3 2002/12/11 19:00:06 dicuccio
- * Re-enabled selection
- *
- * Revision 1.2 2002/12/06 14:08:17 dicuccio
- * Moved feature sorting predicates into feature.[h,c]pp
- *
- * Revision 1.1 2002/11/29 15:28:10 dicuccio
- * Initial revision - moved from gui/core/view/graphic
- *
- * Revision 1.2 2002/11/09 20:57:08 dicuccio
- * Performance improvements: Implemented smarter widget update (use update
- * flags to specify update conditions); use a more intuitive (and flexible)
- * mechanism to obtain features from the object manager.
- *
- * Revision 1.1 2002/11/07 16:27:26 dicuccio
- * Initial revision
- *
- * ===========================================================================
- */
- #endif // GUI_OBJUTILS___FEATURE__HPP