Skip to content

Commit

Permalink
GSvar - variant tab: variant consequence on transcripts now shown as …
Browse files Browse the repository at this point in the history
…table.
  • Loading branch information
marc-sturm committed Nov 17, 2023
1 parent 94afde9 commit 1c33848
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 77 deletions.
49 changes: 39 additions & 10 deletions src/GSvar/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,21 +174,19 @@ MainWindow::MainWindow(QWidget *parent)
ui_.splitter_2->setStretchFactor(0, 10);
ui_.splitter_2->setStretchFactor(1, 1);
connect(ui_.tabs, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
ui_.actionDebug->setVisible(Settings::boolean("debug_mode_enabled", true));
ui_.actionEncrypt->setVisible(Settings::boolean("debug_mode_enabled", true));

// add rna menu
rna_menu_btn_ = new QToolButton();
rna_menu_btn_->setObjectName("rna_btn");
rna_menu_btn_->setIcon(QIcon(":/Icons/RNA.png"));
rna_menu_btn_->setToolTip("Open RNA menu entries");
rna_menu_btn_->setPopupMode(QToolButton::InstantPopup);
rna_menu_btn_->setMenu(new QMenu());
rna_menu_btn_->menu()->addAction(ui_.actionExpressionData);
rna_menu_btn_->menu()->addAction(ui_.actionExonExpressionData);
rna_menu_btn_->menu()->addAction(ui_.actionShowSplicing);
rna_menu_btn_->menu()->addAction(ui_.actionShowRnaFusions);
rna_menu_btn_->menu()->addAction(ui_.actionShowProcessingSystemCoverage);
rna_menu_btn_->setPopupMode(QToolButton::InstantPopup);

ui_.actionExpressionData->setEnabled(false);
ui_.actionExonExpressionData->setEnabled(false);
Expand All @@ -203,17 +201,34 @@ MainWindow::MainWindow(QWidget *parent)
cfdna_menu_btn_->setObjectName("cfdna_btn");
cfdna_menu_btn_->setIcon(QIcon(":/Icons/cfDNA.png"));
cfdna_menu_btn_->setToolTip("Open cfDNA menu entries");
cfdna_menu_btn_->setPopupMode(QToolButton::InstantPopup);
cfdna_menu_btn_->setMenu(new QMenu());
cfdna_menu_btn_->menu()->addAction(ui_.actionDesignCfDNAPanel);
cfdna_menu_btn_->menu()->addAction(ui_.actionShowCfDNAPanel);
cfdna_menu_btn_->menu()->addAction(ui_.actionCfDNADiseaseCourse);
cfdna_menu_btn_->menu()->addAction(ui_.actionCfDNAAddExcludedRegions);
cfdna_menu_btn_->setPopupMode(QToolButton::InstantPopup);
ui_.tools->addWidget(cfdna_menu_btn_);
// deaktivate on default (only available in somatic)
cfdna_menu_btn_->setVisible(false);
cfdna_menu_btn_->setEnabled(false);

//debugging
if (Settings::boolean("debug_mode_enabled", true))
{
QToolButton* debug_btn = new QToolButton();
debug_btn->setObjectName("cfdna_btn");
debug_btn->setIcon(QIcon(":/Icons/bug.png"));
debug_btn->setPopupMode(QToolButton::InstantPopup);
debug_btn->setMenu(new QMenu());
debug_btn->menu()->addAction("user-specific function", this, SLOT(userSpecificDebugFunction()));
debug_btn->menu()->addSeparator();
debug_btn->menu()->addAction("variant: chr1:948519-948519 T>G", this, SLOT(openDebugTab()));
debug_btn->menu()->addSeparator();
debug_btn->menu()->addAction("gene: BRCA2", this, SLOT(openDebugTab()));
ui_.tools->addWidget(debug_btn);
}
ui_.actionEncrypt->setVisible(Settings::boolean("debug_mode_enabled", true));

//signals and slots
connect(ui_.actionExit, SIGNAL(triggered()), this, SLOT(closeAndLogout()));

Expand Down Expand Up @@ -445,13 +460,12 @@ AnalysisType MainWindow::getCurrentAnalysisType()
return variants_.type();
}

void MainWindow::on_actionDebug_triggered()
void MainWindow::userSpecificDebugFunction()
{
QTime timer;
timer.start();

QString user = Helper::userName();
qDebug() << user;
if (user=="ahsturm1")
{
//VariantHgvsAnnotator debugging
Expand Down Expand Up @@ -1559,9 +1573,6 @@ void MainWindow::on_actionDebug_triggered()
}
*/
}
else if (user=="ahgscha1")
{
}
else if (user=="ahschul1")
{
//Test sample sheet
Expand All @@ -1575,7 +1586,25 @@ void MainWindow::on_actionDebug_triggered()

}

qDebug() << "Elapsed time debugging:" << Helper::elapsedTime(timer, true);
qDebug() << "Elapsed time debug function:" << Helper::elapsedTime(timer, true);
}

void MainWindow::openDebugTab()
{
QAction* action = qobject_cast<QAction*>(sender());
QString text = action->text();
if (text.startsWith("variant:"))
{
openVariantTab(Variant::fromString(text.mid(8).trimmed()));
}
else if (text.startsWith("gene:"))
{
openGeneTab(text.mid(5).trimmed());
}
else
{
THROW(ProgrammingException, "Unprocessed debug action: " + text);
}
}


Expand Down
6 changes: 4 additions & 2 deletions src/GSvar/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,8 +249,6 @@ public slots:
void openVariantListQcFiles();
///Re-analyze current sample/case
void on_actionReanalyze_triggered();
///Action for debugging
void on_actionDebug_triggered();
///Action for variant conversion (VCF > GSvar)
void on_actionConvertVcfToGSvar_triggered();
///Action for variant conversion (HGVS.c > GSvar)
Expand Down Expand Up @@ -314,6 +312,10 @@ public slots:
///Finished the report generation (germline)
void reportGenerationFinished(bool success);

///User-specific debug function
void userSpecificDebugFunction();
///Quick tab opening for debugging
void openDebugTab();

///Shows the variant header context menu
void varHeaderContextMenu(QPoint pos);
Expand Down
13 changes: 0 additions & 13 deletions src/GSvar/MainWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,6 @@
<addaction name="actionCircos"/>
<addaction name="separator"/>
<addaction name="actionVirusDetection"/>
<addaction name="actionDebug"/>
</widget>
<action name="actionOpen">
<property name="text">
Expand Down Expand Up @@ -947,18 +946,6 @@
<string>Open Gene tab.</string>
</property>
</action>
<action name="actionDebug">
<property name="icon">
<iconset resource="GSvar.qrc">
<normaloff>:/Icons/bug.png</normaloff>:/Icons/bug.png</iconset>
</property>
<property name="text">
<string>Debug</string>
</property>
<property name="visible">
<bool>true</bool>
</property>
</action>
<action name="actionSampleSearch">
<property name="icon">
<iconset resource="GSvar.qrc">
Expand Down
3 changes: 3 additions & 0 deletions src/GSvar/ProcessedSampleWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,9 @@ QStringList ProcessedSampleWidget::limitedQCParameter(const QString& sample_type
parameter_list << "QC:2000051"; // SNV allele frequency deviation
parameter_list << "QC:2000040"; // Sample correlation (somatic tumor sample)
parameter_list << "QC:2000045"; // known somatic variants percentage (somatic tumor sample)
parameter_list << "QC:2000113"; // CNV count
parameter_list << "QC:2000114"; // coverage profile correlation
parameter_list << "QC:2000117"; // SV count
}
else if(sample_type == "cfDNA")
{
Expand Down
56 changes: 30 additions & 26 deletions src/GSvar/VariantWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ VariantWidget::VariantWidget(const Variant& variant, QWidget *parent)
connect(ui_.update_btn, SIGNAL(clicked(bool)), this, SLOT(updateGUI()));
connect(ui_.edit_btn, SIGNAL(clicked(bool)), this, SLOT(editComment()));
connect(ui_.class_btn, SIGNAL(clicked(bool)), this, SLOT(editClassification()));
connect(ui_.transcripts, SIGNAL(linkActivated(QString)), this, SLOT(openGeneTab(QString)));
connect(ui_.af_gnomad, SIGNAL(linkActivated(QString)), this, SLOT(gnomadClicked(QString)));
connect(ui_.pubmed, SIGNAL(linkActivated(QString)), this, SLOT(pubmedClicked(QString)));
connect(ui_.table, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(tableCellDoubleClicked(int, int)));
Expand Down Expand Up @@ -60,7 +59,12 @@ void VariantWidget::updateGUI()
SqlQuery query1 = db.getQuery();
query1.exec("SELECT * FROM variant WHERE id=" + variant_id);
query1.next();
ui_.af_gnomad->setText("<a style=\"color: #000000;\" href=\"" + variant_id + "\">" + query1.value("gnomad").toString() + "</a>");
QString gnomad_af;
if (!query1.value("gnomad").isNull())
{
gnomad_af = QString::number(query1.value("gnomad").toDouble(), 'f', 5);
}
ui_.af_gnomad->setText("<a style=\"color: #000000;\" href=\"" + variant_id + "\">" + gnomad_af + "</a>");

QVariant cadd = query1.value("cadd");
ui_.cadd->setText(cadd.isNull() ? "" : cadd.toString());
Expand All @@ -75,29 +79,6 @@ void VariantWidget::updateGUI()
ui_.ngsd_counts->setText(text);
GSvarHelper::limitLines(ui_.comments, query1.value("comment").toString());


//get all transcripts containing the variant
TranscriptList transcripts = db.transcriptsOverlapping(variant_.chr(), variant_.start(), variant_.end(), 5000);
transcripts.sortByRelevance();

//annotate consequence for each transcript
QStringList lines;
FastaFileIndex genome_idx(Settings::string("reference_genome"));
VariantHgvsAnnotator hgvs_annotator(genome_idx);
foreach(const Transcript& trans, transcripts)
{
VariantConsequence consequence = hgvs_annotator.annotate(trans, variant_);

QString line = "<a href=\"" + trans.gene() + "\">" + trans.gene() + "</a> " + trans.nameWithVersion() + ": " + consequence.typesToString() + " " + consequence.hgvs_c + " " + consequence.hgvs_p;

//flags for important transcripts
QStringList flags = trans.flags(true);
if (!flags.isEmpty()) line.append(" " + flags.join(" "));

lines << line;
}
ui_.transcripts->setText(lines.join("<br>"));

//PubMed ids
QStringList pubmed_ids = db.pubmedIds(variant_id);
QStringList pubmed_links;
Expand All @@ -114,6 +95,29 @@ void VariantWidget::updateGUI()
ui_.pubmed->setText(pubmed_links.join(", ") + open_all);
ui_.pubmed->setToolTip(pubmed_ids.join(", "));

//annotate consequence for each transcript
TranscriptList transcripts = db.transcriptsOverlapping(variant_.chr(), variant_.start(), variant_.end(), 5000);
transcripts.sortByRelevance();
FastaFileIndex genome_idx(Settings::string("reference_genome"));
VariantHgvsAnnotator hgvs_annotator(genome_idx);
ui_.transcripts->setRowCount(transcripts.count());
for(int i=0; i<transcripts.count(); ++i)
{
const Transcript& trans = transcripts[i];
VariantConsequence consequence = hgvs_annotator.annotate(trans, variant_);

QLabel* label = GUIHelper::createLinkLabel("<a href=\"" + trans.gene() + "\">" + trans.gene() + "</a>", false);
connect(label, SIGNAL(linkActivated(QString)), this, SLOT(openGeneTab(QString)));
ui_.transcripts->setCellWidget(i, 0, label);
ui_.transcripts->setItem(i, 1, GUIHelper::createTableItem(trans.nameWithVersion()));
ui_.transcripts->setItem(i, 2, GUIHelper::createTableItem(consequence.hgvs_c));
ui_.transcripts->setItem(i, 3, GUIHelper::createTableItem(consequence.hgvs_p));
ui_.transcripts->setItem(i, 4, GUIHelper::createTableItem(consequence.typesToString(", ")));
ui_.transcripts->setItem(i, 5, GUIHelper::createTableItem(trans.flags(false).join(", ")));
}
GUIHelper::resizeTableCells(ui_.transcripts, 400);
GUIHelper::resizeTableHeight(ui_.transcripts);


//classification
SqlQuery query4 = db.getQuery();
Expand Down Expand Up @@ -141,7 +145,7 @@ void VariantWidget::updateGUI()
SqlQuery query2 = db.getQuery();
query2.exec("SELECT processed_sample_id, genotype, mosaic FROM detected_variant WHERE variant_id=" + variant_id);
bool fill_table = true;
if (query2.size()>100)
if (query2.size()>250)
{
int res = QMessageBox::question(this, "Many variants detected.", "The variant is in NGSD " + QString::number(query2.size()) + " times.\nShowing the variant table might be slow.\nDo you want to fill the variant table?", QMessageBox::Yes, QMessageBox::No|QMessageBox::Default);
if (res!=QMessageBox::Yes) fill_table = false;
Expand Down
97 changes: 72 additions & 25 deletions src/GSvar/VariantWidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,1">
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0,1">
<property name="spacing">
<number>3</number>
</property>
Expand Down Expand Up @@ -209,29 +209,6 @@
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>transcripts:</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="transcripts">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>PubMed ids:</string>
Expand All @@ -241,7 +218,7 @@
</property>
</widget>
</item>
<item row="7" column="1">
<item row="6" column="1">
<widget class="QLabel" name="pubmed">
<property name="text">
<string/>
Expand Down Expand Up @@ -327,6 +304,76 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Consequence on transcripts</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="spacing">
<number>3</number>
</property>
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item>
<widget class="QTableWidget" name="transcripts">
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectItems</enum>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>gene</string>
</property>
</column>
<column>
<property name="text">
<string>transcript</string>
</property>
</column>
<column>
<property name="text">
<string>HGVS.c</string>
</property>
</column>
<column>
<property name="text">
<string>HGVS.p</string>
</property>
</column>
<column>
<property name="text">
<string>variant type</string>
</property>
</column>
<column>
<property name="text">
<string>flags</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="sizePolicy">
Expand Down
2 changes: 1 addition & 1 deletion src/cppGUI
Submodule cppGUI updated 2 files
+21 −21 GUIHelper.cpp
+1 −1 GUIHelper.h

0 comments on commit 1c33848

Please sign in to comment.