genome_layoutpolicy.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
- /*
- * ===========================================================================
- * PRODUCTION $Log: genome_layoutpolicy.cpp,v $
- * PRODUCTION Revision 1000.1 2004/06/01 21:12:39 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: genome_layoutpolicy.cpp,v 1000.1 2004/06/01 21:12:39 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: Vlad Lebedev
- *
- * File Description:
- *
- */
- #include <ncbi_pch.hpp>
- #include <gui/widgets/seq_graphic/genome_layoutpolicy.hpp>
- #include <gui/objutils/feature.hpp>
- #include <gui/objutils/comment.hpp>
- #include <gui/objutils/alignment.hpp>
- #include <gui/objutils/feat_pack.hpp>
- #include <gui/objutils/utils.hpp>
- #include <gui/objutils/feat_label.hpp>
- BEGIN_NCBI_SCOPE
- USING_SCOPE(objects);
- CGenomeLayoutPolicy::CGenomeLayoutPolicy()
- {
- }
- void CGenomeLayoutPolicy::PrepareData(CGlPane& pane, CLayout& lay_objects)
- {
- pane.OpenOrtho();
- if (x_IsOverviewMode(pane)) {
- x_PrepareGenomeView(pane, lay_objects);
- } else {
- x_PrepareDetailedView(pane, lay_objects);
- }
-
- pane.Close();
- }
- void CGenomeLayoutPolicy::x_PrepareGenomeView(CGlPane& pane, CLayout& lay_objects)
- {
- TModelRect rcV = pane.GetVisibleRect();
- TSeqRange range( TSeqPos(rcV.Left()), TSeqPos(rcV.Right()) );
-
- lay_objects.Clear();
-
- C2DLayoutEngine engine;
- engine.SetMinDist( x_GetMinSpacing(pane) );
-
- CLayout temporary;
- CLayoutFeat::TFeatList feats;
- CLayoutFeat::TFeatList land_marks;
- CLayoutEngine::TObjects objs;
-
- lay_objects.Clear();
- engine.Layout(objs, lay_objects);
-
- // Add Segment Map
- x_AddSeqSegmentMap(pane, lay_objects, range);
- // Add feature profile histograms
- x_AddHistograms(pane, lay_objects, range);
-
- // All Genes
- CSeqUtils::GetFeatures(m_Handle, range, CSeqFeatData::e_Gene, feats);
-
- // Landmark Genes
- CSeqUtils::GetLandmarkFeatures(m_Handle, range, 150, land_marks);
- // Comments for All Genes
- string str = "All Genes: " + NStr::UIntToString(feats.size());
- CRef<CLayoutObject> comment1(new CLayoutComment(str));
- objs.push_back(comment1);
- engine.Layout(objs, temporary);
- lay_objects.Append(temporary);
-
- if (land_marks.size() < feats.size()) {
- objs.clear();
- NON_CONST_ITERATE (CLayoutFeat::TFeatList, iter, feats) {
- (*iter)->HideLabels(); // hide labels for all genes
- CRef<CLayoutObject> obj(*iter);
- objs.push_back(obj);
- }
- engine.Layout(objs, temporary);
- lay_objects.Append(temporary);
- }
- // Comments for Landmark Genes
- if (land_marks.size() < feats.size()) {
- objs.clear();
- temporary.Clear();
- str = "Landmark Genes: " + NStr::UIntToString(land_marks.size());
-
- CRef<CLayoutObject> comment2(new CLayoutComment(str));
- objs.push_back(comment2);
- engine.Layout(objs, temporary);
- lay_objects.Append(temporary);
- }
- objs.clear();
- SAnnotSelector sel =
- CSeqUtils::GetAnnotSelector(CSeqFeatData::eSubtype_mRNA);
- NON_CONST_ITERATE (CLayoutFeat::TFeatList, iter, land_marks) {
- CLayoutFeat& feat = **iter;
- TSeqRange range = feat.GetMappedFeature().GetLocation().GetTotalRange();
- CRef<CLayoutObject> gene_obj(*iter);
- objs.push_back(gene_obj);
- CLayoutFeat::TFeatList feats_tmp;
- CSeqUtils::GetFeatures(m_Handle, range, sel, feats_tmp);
-
- if (feats_tmp.size() > 1) { // Add a pack of features
- CRef<CLayoutFeatPack> pack(new CLayoutFeatPack(feats_tmp));
- CRef<CLayoutObject> obj(pack);
- objs.push_back(obj);
- } else if (feats_tmp.size() == 1) { // Just add mRNA
- CRef<CLayoutObject> rna_obj(feats_tmp[0]);
- objs.push_back(rna_obj);
- }
- }
-
- temporary.Clear();
- engine.Layout(objs, temporary);
-
- lay_objects.Append(temporary);
- }
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- * $Log: genome_layoutpolicy.cpp,v $
- * Revision 1000.1 2004/06/01 21:12:39 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
- *
- * Revision 1.7 2004/05/21 22:27:55 gorelenk
- * Added PCH ncbi_pch.hpp
- *
- * Revision 1.6 2004/05/03 13:23:58 dicuccio
- * gui/utils --> gui/objutils where needed
- *
- * Revision 1.5 2004/04/07 13:11:28 dicuccio
- * Use proper annotation selector for retrieving mRNA features
- *
- * Revision 1.4 2004/03/23 12:33:56 lebedev
- * Made sequence and histograms bars a layout objects in the object panel.
- * Made segment map a number of layout objects. Get rid of fixed size rows in the object panel.
- *
- * Revision 1.3 2004/03/11 17:53:06 dicuccio
- * Deprecated typedefs TPosition, TDimension, TIndex, TColor. Use TSeqRange instead of TRange
- *
- * Revision 1.2 2004/03/02 15:29:14 lebedev
- * Switch to detailed mode if reached certain number of
- * genes in visible range.
- *
- * Revision 1.1 2004/02/24 14:43:49 lebedev
- * Initial revision
- *
- * ===========================================================================
- */