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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: genome_layoutpolicy.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:12:39  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: genome_layoutpolicy.cpp,v 1000.1 2004/06/01 21:12:39 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Vlad Lebedev
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/widgets/seq_graphic/genome_layoutpolicy.hpp>
  41. #include <gui/objutils/feature.hpp>
  42. #include <gui/objutils/comment.hpp>
  43. #include <gui/objutils/alignment.hpp>
  44. #include <gui/objutils/feat_pack.hpp>
  45. #include <gui/objutils/utils.hpp>
  46. #include <gui/objutils/feat_label.hpp>
  47. BEGIN_NCBI_SCOPE
  48. USING_SCOPE(objects);
  49. CGenomeLayoutPolicy::CGenomeLayoutPolicy()
  50. {
  51. }
  52. void CGenomeLayoutPolicy::PrepareData(CGlPane& pane, CLayout& lay_objects)
  53. {
  54.     pane.OpenOrtho();
  55.     if (x_IsOverviewMode(pane)) {
  56.         x_PrepareGenomeView(pane, lay_objects);
  57.     } else {
  58.         x_PrepareDetailedView(pane, lay_objects);    
  59.     }
  60.     
  61.     pane.Close();
  62. }
  63. void CGenomeLayoutPolicy::x_PrepareGenomeView(CGlPane& pane, CLayout& lay_objects)
  64. {
  65.     TModelRect rcV = pane.GetVisibleRect();
  66.     TSeqRange range( TSeqPos(rcV.Left()), TSeqPos(rcV.Right()) );
  67.     
  68.     lay_objects.Clear();
  69.     
  70.     C2DLayoutEngine engine;
  71.     engine.SetMinDist( x_GetMinSpacing(pane) );
  72.         
  73.     CLayout temporary;
  74.     CLayoutFeat::TFeatList feats;
  75.     CLayoutFeat::TFeatList land_marks;
  76.     CLayoutEngine::TObjects objs;
  77.     
  78.     lay_objects.Clear();
  79.     engine.Layout(objs, lay_objects);
  80.     
  81.     // Add Segment Map
  82.     x_AddSeqSegmentMap(pane, lay_objects, range);
  83.     // Add feature profile histograms
  84.     x_AddHistograms(pane, lay_objects, range);
  85.     
  86.     // All Genes
  87.     CSeqUtils::GetFeatures(m_Handle, range, CSeqFeatData::e_Gene, feats);
  88.     
  89.     // Landmark Genes
  90.     CSeqUtils::GetLandmarkFeatures(m_Handle, range, 150, land_marks);
  91.     // Comments for All Genes
  92.     string str = "All Genes: " + NStr::UIntToString(feats.size());
  93.     CRef<CLayoutObject> comment1(new CLayoutComment(str));
  94.     objs.push_back(comment1);
  95.     engine.Layout(objs, temporary);
  96.     lay_objects.Append(temporary);
  97.         
  98.     if (land_marks.size() < feats.size()) {
  99.         objs.clear();
  100.         NON_CONST_ITERATE (CLayoutFeat::TFeatList, iter, feats) {
  101.             (*iter)->HideLabels();  // hide labels for all genes
  102.             CRef<CLayoutObject> obj(*iter);
  103.             objs.push_back(obj);
  104.         }
  105.         engine.Layout(objs, temporary);
  106.         lay_objects.Append(temporary);
  107.     }
  108.     // Comments for Landmark Genes
  109.     if (land_marks.size() < feats.size()) {
  110.         objs.clear();
  111.         temporary.Clear();
  112.         str  = "Landmark Genes: " + NStr::UIntToString(land_marks.size());
  113.         
  114.         CRef<CLayoutObject> comment2(new CLayoutComment(str));
  115.         objs.push_back(comment2);
  116.         engine.Layout(objs, temporary);
  117.         lay_objects.Append(temporary);
  118.     }
  119.     objs.clear();
  120.     SAnnotSelector sel =
  121.         CSeqUtils::GetAnnotSelector(CSeqFeatData::eSubtype_mRNA);
  122.     NON_CONST_ITERATE (CLayoutFeat::TFeatList, iter, land_marks) {
  123.         CLayoutFeat& feat = **iter;
  124.         TSeqRange range = feat.GetMappedFeature().GetLocation().GetTotalRange();
  125.         CRef<CLayoutObject> gene_obj(*iter);
  126.         objs.push_back(gene_obj);
  127.         CLayoutFeat::TFeatList feats_tmp;
  128.         CSeqUtils::GetFeatures(m_Handle, range, sel, feats_tmp);
  129.         
  130.         if (feats_tmp.size() > 1) {  // Add a pack of features
  131.             CRef<CLayoutFeatPack> pack(new CLayoutFeatPack(feats_tmp));
  132.             CRef<CLayoutObject> obj(pack);
  133.             objs.push_back(obj);
  134.         } else if (feats_tmp.size() == 1) {  // Just add mRNA
  135.             CRef<CLayoutObject> rna_obj(feats_tmp[0]);
  136.             objs.push_back(rna_obj);        
  137.         }
  138.     }
  139.     
  140.     temporary.Clear();
  141.     engine.Layout(objs, temporary);
  142.     
  143.     lay_objects.Append(temporary);
  144. }
  145. END_NCBI_SCOPE
  146. /*
  147.  * ===========================================================================
  148.  * $Log: genome_layoutpolicy.cpp,v $
  149.  * Revision 1000.1  2004/06/01 21:12:39  gouriano
  150.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  151.  *
  152.  * Revision 1.7  2004/05/21 22:27:55  gorelenk
  153.  * Added PCH ncbi_pch.hpp
  154.  *
  155.  * Revision 1.6  2004/05/03 13:23:58  dicuccio
  156.  * gui/utils --> gui/objutils where needed
  157.  *
  158.  * Revision 1.5  2004/04/07 13:11:28  dicuccio
  159.  * Use proper annotation selector for retrieving mRNA features
  160.  *
  161.  * Revision 1.4  2004/03/23 12:33:56  lebedev
  162.  * Made sequence and histograms bars a layout objects in the object panel.
  163.  * Made segment map a number of layout objects. Get rid of fixed size rows in the object panel.
  164.  *
  165.  * Revision 1.3  2004/03/11 17:53:06  dicuccio
  166.  * Deprecated typedefs TPosition, TDimension, TIndex, TColor.  Use TSeqRange instead of TRange
  167.  *
  168.  * Revision 1.2  2004/03/02 15:29:14  lebedev
  169.  * Switch to detailed mode if reached certain number of
  170.  * genes in visible range.
  171.  *
  172.  * Revision 1.1  2004/02/24 14:43:49  lebedev
  173.  * Initial revision
  174.  *
  175.  * ===========================================================================
  176.  */