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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: utils.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:56:12  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OBJUTILS___UTILS__HPP
  10. #define GUI_OBJUTILS___UTILS__HPP
  11. /*  $Id: utils.hpp,v 1000.0 2004/06/01 19:56:12 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:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *    General utility classes for GUI projects.
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <gui/objutils/feature.hpp>
  43. #include <objmgr/bioseq_handle.hpp>
  44. /** @addtogroup GUI_OBJUTILS
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. //
  50. // Main utilities class
  51. //
  52. class NCBI_GUIOBJUTILS_EXPORT CSeqUtils
  53. {
  54. public:
  55.     // flags controlling feature retrieval
  56.     enum {
  57.         fFeature_LinkFeatures = 0x1,
  58.         fFeature_Default = 0
  59.     };
  60.     typedef int TFeatureFlags;
  61.     // request an annotation selector for a given type
  62.     static objects::SAnnotSelector
  63.     GetAnnotSelector(void);
  64.     static objects::SAnnotSelector
  65.     GetAnnotSelector(objects::SAnnotSelector::TAnnotType choice);
  66.     static objects::SAnnotSelector
  67.     GetAnnotSelector(objects::SAnnotSelector::TFeatType);
  68.     static objects::SAnnotSelector
  69.     GetAnnotSelector(objects::SAnnotSelector::TFeatSubtype);
  70.     // Request a list of landmark features from a bioseq.
  71.     static void GetLandmarkFeatures(const objects::CBioseq_Handle&  handle,
  72.                                     const TSeqRange&          range,
  73.                                     size_t                 max_feats,
  74.                                     CLayoutFeat::TFeatList&   info);
  75.     // Request a list of features from a bioseq.
  76.     static void GetFeatures(const objects::CBioseq_Handle&  handle,
  77.                             const TSeqRange&          range,
  78.                             objects::CSeqFeatData::E_Choice feat_type,
  79.                             CLayoutFeat::TFeatList&   info,
  80.                             TFeatureFlags            flags = fFeature_Default);
  81.     static void GetFeatures(const objects::CBioseq_Handle&  handle,
  82.                             const TSeqRange&         range,
  83.                             objects::SAnnotSelector  sel,
  84.                             CLayoutFeat::TFeatList&  feats,
  85.                             TFeatureFlags            flags = fFeature_Default);
  86.     // Link features into a hierarchical list.  This function will transform a
  87.     // linear, feature-order-sorted list of CLayoutFeat objects into a
  88.     // hierarchically arranged list in which genes are linked to mRNAs, mRNAs
  89.     // to CDSs, etc.
  90.     static void LinkFeatures(CLayoutFeat::TFeatList& features);
  91.     // Request a list of alignments from a bioseq.
  92.     enum EAlignFlags {
  93.         fAlign_LinkMatePairs        = 0x1,
  94.         fAlign_MatedAlignsAsPwAlign = 0x2,
  95.         fAlign_Default = 0x0
  96.     };
  97.     typedef int TAlignFlags;
  98.     static void GetAlignments(const objects::CBioseq_Handle& handle,
  99.                               const TSeqRange&               range,
  100.                               CLayoutEngine::TObjects&       info,
  101.                               TAlignFlags flags = fAlign_Default);
  102.     // Request a list of alignments as smears from a bioseq.  Here, 'window'
  103.     // is the number of bases per bin to place in the smeared alignment
  104.     static void GetAlignmentSmears(const objects::CBioseq_Handle& handle,
  105.                                    const TSeqRange&         range,
  106.                                    TSeqPos                  window,
  107.                                    CLayoutEngine::TObjects& aligns);
  108.     // Request a list of graphs from a bioseq.
  109.     static void GetGraphs(const objects::CBioseq_Handle& handle,
  110.                           const TSeqRange&               range,
  111.                           CLayoutEngine::TObjects&       graphs);
  112.     // remap a location to a parent location.  The child location is split
  113.     // such that all of its relative positions will map correctly to the
  114.     // parent location's positions
  115.     static CRef<objects::CSeq_loc>
  116.     RemapChildToParent(const objects::CSeq_loc& parent,
  117.                        const objects::CSeq_loc& child,
  118.                        objects::CScope* scope = NULL);
  119.     // check to see if two seq-ids are identical.  If provided with a scope,
  120.     // this function will use the synonyms available through a scope to check
  121.     // for identicality.  Note that this may require network access, and may
  122.     // be slow.
  123.     static bool Match(const objects::CSeq_id& id1,
  124.                       const objects::CSeq_id& id2, 
  125.                       objects::CScope* scope = NULL);
  126. };
  127. END_NCBI_SCOPE
  128. /* @} */
  129. /*
  130.  * ===========================================================================
  131.  * $Log: utils.hpp,v $
  132.  * Revision 1000.0  2004/06/01 19:56:12  gouriano
  133.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.6
  134.  *
  135.  * Revision 1.6  2004/05/14 14:24:47  dicuccio
  136.  * Added new pure virtual requirement on CLayoutObject(): GetType(), returns enum
  137.  * defined in CLayoutObject
  138.  *
  139.  * Revision 1.5  2004/05/10 00:00:38  dicuccio
  140.  * Added flags to control retrieval of alignments
  141.  *
  142.  * Revision 1.4  2004/05/07 15:44:32  dicuccio
  143.  * Removed GetLabel()
  144.  *
  145.  * Revision 1.3  2004/05/03 13:34:54  dicuccio
  146.  * FIxed include guards, doxygen groups
  147.  *
  148.  * Revision 1.2  2004/05/03 12:41:35  dicuccio
  149.  * Fixed #includes and export specifiers
  150.  *
  151.  * Revision 1.1  2004/04/30 11:52:53  dicuccio
  152.  * Split out from gui/utils
  153.  *
  154.  * Revision 1.32  2004/04/16 14:27:17  dicuccio
  155.  * Added doxygen module tag
  156.  *
  157.  * Revision 1.31  2004/04/16 13:30:39  lebedev
  158.  * Do not link features by default
  159.  *
  160.  * Revision 1.30  2004/04/12 16:49:32  dicuccio
  161.  * Dropped getMatePairs() as separate API - folded into GetAlignments()
  162.  *
  163.  * Revision 1.29  2004/04/07 12:40:53  dicuccio
  164.  * Changed GetAnnotSelector() - for feature types, separated feature type and
  165.  * subtype into different functions.  Changed Match() - scope is now an optional
  166.  * (default null) pointer
  167.  *
  168.  * Revision 1.28  2004/04/06 18:28:26  dicuccio
  169.  * Added GetMatePairs().  Cosmetic changes.
  170.  *
  171.  * Revision 1.27  2004/04/02 16:12:59  yazhuk
  172.  * Added Match() function for comparing CSeq_id-s
  173.  *
  174.  * Revision 1.26  2004/03/23 13:36:14  dicuccio
  175.  * Removed lots of dead functions.  Moved #include of alignment_smear.hpp to .cpp
  176.  *
  177.  * Revision 1.25  2004/03/22 16:39:35  rsmith
  178.  * add GetAlignmentSmears()
  179.  *
  180.  * Revision 1.24  2004/03/11 17:20:23  dicuccio
  181.  * Use gui/gui instead of gui/types.  Use TSeqRange instead of TRange
  182.  *
  183.  * Revision 1.23  2004/02/17 17:17:17  dicuccio
  184.  * Added flags to feature retrieval
  185.  *
  186.  * Revision 1.22  2004/02/04 18:05:30  grichenk
  187.  * Added annotation filtering by set of types/subtypes.
  188.  * Renamed *Choice to *Type in SAnnotSelector.
  189.  *
  190.  * Revision 1.21  2004/01/30 17:12:59  dicuccio
  191.  * Added GetLabel() - moved from plugin_utils.[h,c]pp
  192.  *
  193.  * Revision 1.20  2003/10/28 15:23:47  lebedev
  194.  * GetFeatures method that takes a selector added
  195.  *
  196.  * Revision 1.19  2003/10/22 15:40:57  dicuccio
  197.  * Added API to create a dummy seq-entry to wrap a seq-annot
  198.  *
  199.  * Revision 1.18  2003/10/14 15:42:15  dicuccio
  200.  * Changed API for RemapChildToParent() to accept an optional scope
  201.  *
  202.  * Revision 1.17  2003/10/14 12:19:47  dicuccio
  203.  * Added RemapChildToParent() for remapping seq-locs
  204.  *
  205.  * Revision 1.16  2003/09/29 15:20:08  dicuccio
  206.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  207.  *
  208.  * Revision 1.15  2003/09/24 18:17:23  dicuccio
  209.  * Add additional GetAnnotSelector prototype
  210.  *
  211.  * Revision 1.14  2003/09/17 16:19:25  dicuccio
  212.  * Removed SetResolveDepth().  Added new functions for formatting annotation
  213.  * selectors in standard ways
  214.  *
  215.  * Revision 1.13  2003/08/22 15:57:11  dicuccio
  216.  * Removed 'USING_SCOPE(objects)'.  Removed export specifier from inline structs
  217.  *
  218.  * Revision 1.12  2003/08/18 14:53:26  dicuccio
  219.  * Changed nales: CFeature -> CLayoutFeat; CAlignment -> CLayoutAlign; CGraph ->
  220.  * CLayoutGraph; CProtProduct -> CLayoutProtProd.
  221.  * Removed USING_SCOPE(objects);
  222.  *
  223.  * Revision 1.11  2003/08/15 19:33:11  dicuccio
  224.  * Added SetResolveDepth() for determining the correct depth of annotations
  225.  *
  226.  * Revision 1.10  2003/07/29 13:38:37  lebedev
  227.  * GetGraphs method added
  228.  *
  229.  * Revision 1.9  2003/07/18 13:33:22  lebedev
  230.  * Method to retrieve alignments added
  231.  *
  232.  * Revision 1.8  2003/06/23 13:18:49  dicuccio
  233.  * Merged functionality in from seq_utils.hpp
  234.  *
  235.  * Revision 1.7  2003/06/10 13:32:21  dicuccio
  236.  * Added new API for retrieving landmark features.  Cleaned up a lot of dead code.
  237.  *
  238.  * Revision 1.6  2003/06/02 16:01:30  dicuccio
  239.  * Rearranged include/objects/ subtree.  This includes the following shifts:
  240.  *     - include/objects/alnmgr --> include/objtools/alnmgr
  241.  *     - include/objects/cddalignview --> include/objtools/cddalignview
  242.  *     - include/objects/flat --> include/objtools/flat
  243.  *     - include/objects/objmgr/ --> include/objmgr/
  244.  *     - include/objects/util/ --> include/objmgr/util/
  245.  *     - include/objects/validator --> include/objtools/validator
  246.  *
  247.  * Revision 1.5  2003/01/15 20:58:38  dicuccio
  248.  * Added interface functions for linking and packing features.  Removed old
  249.  * bitmask feature types in favor of toolkit standard CSeqFeatData::E_Choice
  250.  * types.
  251.  *
  252.  * Revision 1.4  2003/01/13 13:11:42  dicuccio
  253.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  254.  * Moved all FLUID-generated code into namespace ncbi.
  255.  *
  256.  * Revision 1.3  2003/01/09 14:48:21  dicuccio
  257.  * Use 'const CBioseq_Handle&' instead of 'CBioseq_Handle&'
  258.  *
  259.  * Revision 1.2  2002/12/19 18:13:03  dicuccio
  260.  * Added export specifiers for Win32.
  261.  *
  262.  * Revision 1.1  2002/11/29 15:28:10  dicuccio
  263.  * Initial revision - moved from gui/core/view/graphic
  264.  *
  265.  * ===========================================================================
  266.  */
  267. #endif  // GUI_OBJUTILS___UTILS__HPP