From 465e7bb79247630f7625022e96524a8ac1703b22 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Mon, 7 Jun 2010 08:32:47 +0000 Subject: [PATCH] New SequenceViewer, added new DisplayMode "Conservation 2" git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2346 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/gui/src/CMakeLists.txt | 2 +- .../gui/src/sequence/alignment_view_object.cc | 80 ++++++++++++++----- .../gui/src/sequence/alignment_view_object.hh | 10 ++- 3 files changed, 66 insertions(+), 26 deletions(-) diff --git a/modules/gui/src/CMakeLists.txt b/modules/gui/src/CMakeLists.txt index f8aeaaf00..744b59c57 100644 --- a/modules/gui/src/CMakeLists.txt +++ b/modules/gui/src/CMakeLists.txt @@ -480,7 +480,7 @@ module(NAME gui SOURCES ${OST_GUI_MOCS} ${OST_GUI_SOURCES} ${OST_GUI_INPUT_HEADERS} ${OST_GUI_DATA_VIEWER_HEADERS} ${OST_GUI_HEADERS} - DEPENDS_ON gfx io mol_alg + DEPENDS_ON gfx io mol_alg seq_alg LINK ${QT_LIBRARIES} ${PYTHON_LIBRARIES} ${BOOST_PYTHON_LIBRARIES} ${SPNAV_LIBRARIES}) include_directories(${PYTHON_INCLUDE_PATH}) qt4_add_resources(OST_QT_RESOURCE dngr.qrc) diff --git a/modules/gui/src/sequence/alignment_view_object.cc b/modules/gui/src/sequence/alignment_view_object.cc index c7be971ea..dc7197641 100644 --- a/modules/gui/src/sequence/alignment_view_object.cc +++ b/modules/gui/src/sequence/alignment_view_object.cc @@ -28,6 +28,7 @@ #include <ost/mol/view_op.hh> #include <ost/seq/aligned_region.hh> +#include <ost/seq/alg/conservation.hh> #include "sequence_row.hh" #include "secstr_row.hh" @@ -83,10 +84,11 @@ QColor GetForeGroundColor(QColor background){ } - QMap<QString,int> AlignmentViewObject::group_map_ = GetGroupMap(); -const QString AlignmentViewObject::conservation_mode = "Highlight conservation"; + +const QString AlignmentViewObject::conservation_mode_1 = "Highlight conservation 1"; +const QString AlignmentViewObject::conservation_mode_2 = "Highlight conservation 2"; AlignmentViewObject::AlignmentViewObject(const seq::AlignmentHandle& alignment, QObject* parent): SequenceViewObject(parent), alignment_(alignment) { @@ -95,6 +97,18 @@ AlignmentViewObject::AlignmentViewObject(const seq::AlignmentHandle& alignment, this->AddSequence(seq_handle, seq_handle.GetName().c_str()); } + std::vector<Real> values = seq::alg::Conservation(alignment,false); + + gradient_.SetColorAt(0,gfx::Color(0,0,1)); + gradient_.SetColorAt(0.5,gfx::Color(1,1,1)); + gradient_.SetColorAt(1,gfx::Color(1,0,0)); + //Calculate Conservation Mode 1 + for(unsigned int i=0; i<values.size(); i++){ + gfx::Color color = gradient_.GetColorAt(values[i]); + conservation_1_[i] = QColor(color.Red()*255,color.Green()*255,color.Blue()*255); + } + + //Calculate Conservation Mode 2 for(int j=0; j<alignment.GetLength(); j++){ int group = 0; QString element = ""; @@ -120,49 +134,71 @@ AlignmentViewObject::AlignmentViewObject(const seq::AlignmentHandle& alignment, } if(element.size()==1){ - conservation_[j] = QColor(175,175,175); + conservation_2_[j] = QColor(175,175,175); } else if(group > 0){ - conservation_[j] = QColor(200,200,200); + conservation_2_[j] = QColor(200,200,200); } else{ - conservation_[j] = Qt::transparent; + conservation_2_[j] = Qt::transparent; } } - this->AddDisplayMode(conservation_mode); + this->AddDisplayMode(conservation_mode_1); + this->AddDisplayMode(conservation_mode_2); } QVariant AlignmentViewObject::GetData(int row, int column, int role) { - if(column > 0 && this->GetCurrentDisplayMode() == conservation_mode){ - if(role == Qt::UserRole+3 ){ - if(column -1 < conservation_.size()){ - return QVariant(conservation_[column-1]); + if(column > 0){ + if(this->GetCurrentDisplayMode() == conservation_mode_1){ + if(role == Qt::UserRole+3 ){ + if(column -1 < conservation_1_.size()){ + return QVariant(conservation_1_[column-1]); + } + return QVariant(Qt::transparent); } + + if(role == Qt::ForegroundRole){ + if(column -1 < conservation_1_.size()){ + if(conservation_1_[column-1].red()>128){ + return QVariant(Qt::black); + } + else{ + return QVariant(Qt::white); + } + } return QVariant(Qt::transparent); + } } - - if(role == Qt::ForegroundRole){ - if(column -1 < conservation_.size()){ - return QVariant(Qt::black); + else if(this->GetCurrentDisplayMode() == conservation_mode_2){ + if(role == Qt::UserRole+3 ){ + if(column -1 < conservation_2_.size()){ + return QVariant(conservation_2_[column-1]); + } + return QVariant(Qt::transparent); + } + if(role == Qt::ForegroundRole){ + if(column -1 < conservation_2_.size()){ + return QVariant(Qt::black); } return QVariant(Qt::transparent); + } } - } - return BaseViewObject::GetData(row,column,role); } void AlignmentViewObject::SetDisplayMode(const QString& mode) { - if(this->display_modes_.contains(mode) && mode == conservation_mode){ - for(int i=0 ; i<this->GetRowCount(); i++){ - BaseRow* row = this->GetRow(i); - row->RemovePainter(seq_secondary_structure_painter); - row->RemovePainter(align_properties_painter); - row->InsertPainter(conservation_painter,1); + if(this->display_modes_.contains(mode)){ + if(mode == conservation_mode_1 || mode == conservation_mode_2){ + for(int i=0 ; i<this->GetRowCount(); i++){ + BaseRow* row = this->GetRow(i); + row->RemovePainter(seq_secondary_structure_painter); + row->RemovePainter(align_properties_painter); + row->InsertPainter(conservation_painter,1); + } } } SequenceViewObject::SetDisplayMode(mode); diff --git a/modules/gui/src/sequence/alignment_view_object.hh b/modules/gui/src/sequence/alignment_view_object.hh index 242e1efea..b8fee2800 100644 --- a/modules/gui/src/sequence/alignment_view_object.hh +++ b/modules/gui/src/sequence/alignment_view_object.hh @@ -25,6 +25,8 @@ #include <ost/seq/alignment_handle.hh> +#include <ost/gfx/gradient.hh> + #include "sequence_view_object.hh" namespace ost { namespace gui { @@ -37,18 +39,20 @@ public: AlignmentViewObject(const seq::AlignmentHandle& alignment, QObject* parent = 0); QVariant GetData(int row, int column, int role); - const seq::AlignmentHandle& GetAlignment(); void SetDisplayMode(const QString& mode); private: + gfx::Gradient gradient_; seq::AlignmentHandle alignment_; - QMap<int, QColor> conservation_; + QMap<int, QColor> conservation_1_; + QMap<int, QColor> conservation_2_; static QMap<QString,int> group_map_; - static const QString conservation_mode; + static const QString conservation_mode_1; + static const QString conservation_mode_2; }; -- GitLab