Skip to content
Snippets Groups Projects
Commit 53fafb57 authored by Langella Olivier's avatar Langella Olivier
Browse files

display isotope ratio on clicked peaks

parent 434fa620
No related branches found
No related tags found
No related merge requests found
......@@ -36,6 +36,14 @@
#include <pappsomspp/exception/exceptionnotpossible.h>
bool XicBoxNaturalIsotope::contains(const pappso::XicPeakSp & peak) const {
for (const pappso::XicPeakSp & peak_i:detected_peak_list) {
if (peak_i.get() == peak.get()) {
return true;
}
}
return false;
}
class XicDetectionList: public pappso::XicDetectionSinkInterface {
public:
......@@ -146,10 +154,19 @@ XicBox::~XicBox()
void XicBox::onXicWidgetClick(double rt, double intensity) {
qDebug() << __FILE__ << " " <<__FUNCTION__ << " " << __LINE__;
ui->xic_widget->clearXicPeakBorders();
for (pappso::XicPeakSp xic_peak_sp:_xic_peak_current_list) {
std::vector <pappso::XicPeakSp> draw_peak_borders;
for (XicBoxNaturalIsotope peak:_natural_isotope_list) {
qDebug() << __FILE__ << " " <<__FUNCTION__ << " " << __LINE__;
ui->xic_widget->drawXicPeakBorders(xic_peak_sp);
draw_peak_borders.push_back(peak.one_peak_sp);
if (peak.one_peak_sp.get() != nullptr) {
ui->xic_widget->drawXicPeakBorders(peak.one_peak_sp);
}
}
if (_peptide_evidence_list.size() == 0) {
drawObservedAreaBars(draw_peak_borders);
}
}
void XicBox::remove() {
......@@ -216,26 +233,29 @@ void XicBox::setPeptideEvidenceInMsRun(const PeptideEvidence * p_peptide_evidenc
void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
qDebug() << "XicBox::setXic begin " << xic_sp_list.size();
ui->xic_widget->clear();
for (int i=0; i < xic_sp_list.size(); i++) {
_natural_isotope_list[i].xic_sp = xic_sp_list[i];
}
//pappso::XicWidget * xic_widget = new pappso::XicWidget(this);
//ui->xic_list_widget->layout()->addWidget(xic_widget);
for (int i=0; i < xic_sp_list.size(); i++) {
qDebug() << "XicBox::setXic xic " << xic_sp_list[i].get();
if (xic_sp_list[i].get() == nullptr) {
throw new pappso::PappsoException("Error in XicBox::setXic:\n xic_sp_list[i].get() == nullptr");
for (XicBoxNaturalIsotope & xic_isotope :_natural_isotope_list) {
//qDebug() << "XicBox::setXic xic " << xic_isotope.xic_sp.get();
if (xic_isotope.xic_sp.get() == nullptr) {
throw new pappso::PappsoException("Error in XicBox::setXic:\n xic_isotope.xic_sp.get() == nullptr");
}
qDebug() << "XicBox::setXic xic_sp_list[i].size() " << xic_sp_list[i].get()->size();
ui->xic_widget->addXicSp(xic_sp_list[i]);
QString isotope_name = QString("+%1").arg(_isotope_mass_list[i].get()->getIsotopeNumber());
if (_isotope_mass_list[i].get()->getIsotopeRank() > 1) {
isotope_name = QString("+%1 [%2]").arg(_isotope_mass_list[i].get()->getIsotopeNumber()).arg(_isotope_mass_list[i].get()->getIsotopeRank());
qDebug() << "XicBox::setXic xic_isotope.xic_sp.size() " << xic_isotope.xic_sp.get()->size();
ui->xic_widget->addXicSp(xic_isotope.xic_sp);
QString isotope_name = QString("+%1").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber());
if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank() > 1) {
isotope_name = QString("+%1 [%2]").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber()).arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank());
}
isotope_name.append(QString(" (%1%)").arg((int) (_isotope_mass_list[i].get()->getIntensityRatio()*100)));
ui->xic_widget->setName(xic_sp_list[i].get(), isotope_name);
isotope_name.append(QString(" (%1%)").arg((int) (xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio()*100)));
ui->xic_widget->setName(xic_isotope.xic_sp.get(), isotope_name);
if (_isotope_mass_list[i].get()->getIsotopeNumber() == 0) {
if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber() == 0) {
for (const PeptideEvidence * peptide_evidence:_peptide_evidence_list) {
qDebug() << "XicBox::setXic peptide_evidence " << peptide_evidence->getRetentionTime();
ui->xic_widget->addMsMsEvent(xic_sp_list[i].get(), peptide_evidence->getRetentionTime());
ui->xic_widget->addMsMsEvent(xic_isotope.xic_sp.get(), peptide_evidence->getRetentionTime());
}
}
}
......@@ -247,17 +267,19 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
emit loadXic(_p_peptide_evidence->getMsRunP(), _isotope_mass_list[_xic_widget_list.size()].get()->getMz(), _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max);
}
*/
_xic_peak_match_list.clear();
XicDetectionList xic_list;
xic_list.setPeptideEvidenceList(_peptide_evidence_list);
std::vector <pappso::XicPeakSp> draw_peak_borders;
for (int i=0; i < xic_sp_list.size(); i++) {
for (XicBoxNaturalIsotope & xic_isotope :_natural_isotope_list) {
try {
xic_list.clear();
_p_xic_window->xicDetect(*(xic_sp_list[i].get()), &xic_list);
_xic_peak_match_list.push_back(xic_list.getMatchedPeak());
ui->xic_widget->addXicPeakList(xic_sp_list[i].get(), xic_list.getXicPeakList());
_p_xic_window->xicDetect(*(xic_isotope.xic_sp.get()), &xic_list);
xic_isotope.matched_peak_sp = xic_list.getMatchedPeak();
xic_isotope.detected_peak_list = xic_list.getXicPeakList();
ui->xic_widget->addXicPeakList(xic_isotope.xic_sp.get(), xic_list.getXicPeakList());
draw_peak_borders.push_back(xic_isotope.matched_peak_sp);
}
catch (const pappso::ExceptionNotPossible & e) {
qDebug() << e.qwhat();
......@@ -266,7 +288,11 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
qDebug() << "XicBox::setXic plot" ;
ui->xic_widget->plot();
drawObservedAreaBars(draw_peak_borders);
}
void XicBox::drawObservedAreaBars(const std::vector<pappso::XicPeakSp> & observed_peak_to_draw_list) {
if (_isotope_ratio_graph_observed_intensity == nullptr) {
qDebug() << "XicBox::setXic plot new QCPBars" ;
_isotope_ratio_graph_observed_intensity = new QCPBars(ui->histo_widget->xAxis, ui->histo_widget->yAxis2);
......@@ -287,17 +313,23 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
int i = 0;
qDebug() << "XicBox::setXic plot _isotope_mass_list" ;
for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
if (_xic_peak_match_list[i].get() == nullptr) {
for (const XicBoxNaturalIsotope & xic_isotope : _natural_isotope_list) {
pappso::XicPeakSp peak_to_draw;
for (pappso::XicPeakSp observed_peak : observed_peak_to_draw_list) {
if (xic_isotope.contains(observed_peak)) {
peak_to_draw = observed_peak;
}
}
if (peak_to_draw.get() == nullptr) {
}
else {
sum += _xic_peak_match_list[i].get()->getArea();
observed_intensity_data << _xic_peak_match_list[i].get()->getArea();
QString isotope_name = QString("+%1").arg(_isotope_mass_list[i].get()->getIsotopeNumber());
if (_isotope_mass_list[i].get()->getIsotopeRank() > 1) {
isotope_name = QString("+%1 [%2]").arg(_isotope_mass_list[i].get()->getIsotopeNumber()).arg(_isotope_mass_list[i].get()->getIsotopeRank());
sum += peak_to_draw.get()->getArea();
observed_intensity_data << peak_to_draw.get()->getArea();
QString isotope_name = QString("+%1").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber());
if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank() > 1) {
isotope_name = QString("+%1 [%2]").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber()).arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank());
}
isotope_name.append(QString(" (%1%)").arg((int) (_isotope_mass_list[i].get()->getIntensityRatio()*100)));
isotope_name.append(QString(" (%1%)").arg((int) (xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio()*100)));
labels << isotope_name;
ticks << i;
}
......@@ -321,11 +353,12 @@ void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) {
void XicBox::setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverageSp> isotope_mass_list) {
_isotope_mass_list = isotope_mass_list;
_natural_isotope_list.clear();
std::vector<pappso::mz> mass_list;
for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: isotope_mass_list) {
mass_list.push_back(natural_isotope_average.get()->getMz());
_natural_isotope_list.push_back({nullptr, natural_isotope_average, nullptr, nullptr});
}
emit loadXic(_msrun_sp, mass_list, _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max);
......@@ -342,14 +375,14 @@ void XicBox::setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverage
QVector<QString> labels;
int i = 0;
double sum = 0;
for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
sum += natural_isotope_average.get()->getIntensityRatio();
theoretical_ratio_data << natural_isotope_average.get()->getIntensityRatio();
QString isotope_name = QString("+%1").arg(_isotope_mass_list[i].get()->getIsotopeNumber());
if (_isotope_mass_list[i].get()->getIsotopeRank() > 1) {
isotope_name = QString("+%1 [%2]").arg(_isotope_mass_list[i].get()->getIsotopeNumber()).arg(_isotope_mass_list[i].get()->getIsotopeRank());
for (const XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
sum += xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio();
theoretical_ratio_data << xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio();
QString isotope_name = QString("+%1").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber());
if (xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank() > 1) {
isotope_name = QString("+%1 [%2]").arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeNumber()).arg(xic_isotope.peptide_natural_isotope_sp.get()->getIsotopeRank());
}
isotope_name.append(QString(" (%1%)").arg((int) (_isotope_mass_list[i].get()->getIntensityRatio()*100)));
isotope_name.append(QString(" (%1%)").arg((int) (xic_isotope.peptide_natural_isotope_sp.get()->getIntensityRatio()*100)));
labels << isotope_name;
ticks << i;
i++;
......@@ -371,7 +404,7 @@ void XicBox::setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverage
ui->histo_widget->yAxis->setRange(0, sum);
ui->histo_widget->xAxis->setRange(-0.8, _isotope_mass_list.size());
ui->histo_widget->xAxis->setRange(-0.8, _natural_isotope_list.size());
ui->histo_widget->replot();
}
......@@ -381,8 +414,8 @@ void XicBox::reExtractXic() {
ui->xic_widget->clear();
std::vector<pappso::mz> mass_list;
for (pappso::PeptideNaturalIsotopeAverageSp & natural_isotope_average: _isotope_mass_list) {
mass_list.push_back(natural_isotope_average.get()->getMz());
for (const XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
mass_list.push_back(xic_isotope.peptide_natural_isotope_sp.get()->getMz());
}
emit loadXic(_msrun_sp, mass_list, _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max);
qDebug() << "XicBox::reExtractXic end";
......@@ -394,15 +427,21 @@ void XicBox::setRetentionTime(double rt) {
}
void XicBox::setXicPeakList(std::vector<std::pair<pappso::XicSp, pappso::XicPeakSp>> xic_peak_list) {
qDebug() << "XicBox::setXicPeakList begin";
_xic_peak_current_list.clear();
QString html ;
for (XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
xic_isotope.one_peak_sp = nullptr;
}
for (std::pair<pappso::XicSp, pappso::XicPeakSp> & pair_xic_peak: xic_peak_list) {
for (XicBoxNaturalIsotope & xic_isotope: _natural_isotope_list) {
if (xic_isotope.xic_sp.get() == pair_xic_peak.first.get()) {
xic_isotope.one_peak_sp = pair_xic_peak.second;
}
}
html.append(tr("<p>%1<br/>area: %2<br/>rt begin: %3<br/>rt max: %4<br/>rt end: %5<br/></p>").arg(ui->xic_widget->getName(pair_xic_peak.first.get())).arg(pair_xic_peak.second.get()->getArea()).arg(pair_xic_peak.second.get()->getLeftBoundary().rt)
.arg(pair_xic_peak.second.get()->getMaxXicElement().rt)
.arg(pair_xic_peak.second.get()->getRightBoundary().rt)
);
_xic_peak_current_list.push_back(pair_xic_peak.second);
}
ui->xic_widget->setToolTip(html);
......
......@@ -43,6 +43,18 @@ namespace Ui {
class XicBox;
}
struct XicBoxNaturalIsotope {
bool contains(const pappso::XicPeakSp & peak) const;
pappso::XicSp xic_sp;
pappso::PeptideNaturalIsotopeAverageSp peptide_natural_isotope_sp;
pappso::XicPeakSp matched_peak_sp;
pappso::XicPeakSp one_peak_sp;
std::vector <pappso::XicPeakSp> detected_peak_list;
};
class XicBox: public QWidget
{
Q_OBJECT
......@@ -67,6 +79,9 @@ private slots:
void setXicPeakList(std::vector<std::pair<pappso::XicSp, pappso::XicPeakSp>> xic_peak_list);
void onRtUnitChanged();
void onXicWidgetClick(double rt, double intensity);
private:
void drawObservedAreaBars(const std::vector<pappso::XicPeakSp> & observed_peak_to_draw);
private:
Ui::XicBox *ui;
......@@ -75,11 +90,8 @@ private:
const PeptideEvidence * _p_peptide_evidence;
MsRunSp _msrun_sp;
std::vector<const PeptideEvidence *> _peptide_evidence_list;
std::vector<pappso::PeptideNaturalIsotopeAverageSp> _isotope_mass_list;
pappso::XicSp _xic_sp;
std::vector<XicBoxNaturalIsotope> _natural_isotope_list;
std::vector<pappso::XicWidget *> _xic_widget_list;
std::vector<pappso::XicPeakSp> _xic_peak_match_list;
std::vector<pappso::XicPeakSp> _xic_peak_current_list;
QCPBars * _isotope_ratio_graph_observed_intensity= nullptr;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment