From cbd2c5595c6b1dc26b3ba4415c5fb5648875e616 Mon Sep 17 00:00:00 2001 From: Olivier Langella <olivier.langella@u-psud.fr> Date: Fri, 22 Dec 2017 14:28:22 +0100 Subject: [PATCH] beautifull histogram --- src/gui/project_view/projectwindow.cpp | 173 +++++++++++++------------ 1 file changed, 89 insertions(+), 84 deletions(-) diff --git a/src/gui/project_view/projectwindow.cpp b/src/gui/project_view/projectwindow.cpp index dbd44dac0..b723eb1b4 100644 --- a/src/gui/project_view/projectwindow.cpp +++ b/src/gui/project_view/projectwindow.cpp @@ -78,6 +78,7 @@ ProjectWindow::ProjectWindow(MainWindow *parent): setFocusPolicy(Qt::ClickFocus); _p_bars = new QCPBars(ui->mass_histogram_widget->xAxis, ui->mass_histogram_widget->yAxis); + ui->mass_histogram_widget->addGraph(); #if QT_VERSION >= 0x050000 @@ -127,6 +128,94 @@ ProjectWindow::~ProjectWindow() } + +void ProjectWindow::computeMassPrecision() { + qDebug() << "ProjectWindow::computeMassPrecision begin"; + try { + ValidationState state = ValidationState::validAndChecked; + std::vector< pappso::pappso_double> delta_list; + pappso::PrecisionUnit unit = pappso::PrecisionUnit::dalton; + if (ui->precision_unit_combobox->currentText() == "ppm") { + unit = pappso::PrecisionUnit::ppm; + } + + for (IdentificationGroup * identification_group : _project_sp.get()->getIdentificationGroupList()) { + identification_group->collectMhDelta(delta_list, unit, state); + } + + + qDebug() << "ProjectWindow::computeMassPrecision accumulate"; + pappso::pappso_double sum = std::accumulate(delta_list.begin(), delta_list.end(), 0); + + qDebug() << "ProjectWindow::computeMassPrecision delta_list.size()=" << delta_list.size(); + pappso::pappso_double mean = 0; + if (delta_list.size() > 0) { + mean = sum / ((pappso::pappso_double) delta_list.size()); + } + else { + throw pappso::PappsoException(QObject::tr("division by zero : no valid peptide found. Please check your filter parameters (decoy regexp or database particularly)")); + } + + std::sort(delta_list.begin(), delta_list.end()); + pappso::pappso_double median = delta_list[(delta_list.size()/2)]; + + + qDebug() << "ProjectWindow::computeMassPrecision sd"; + pappso::pappso_double sd = 0; + for (pappso::pappso_double val : delta_list) { + //sd = sd + ((val - mean) * (val - mean)); + sd += std::pow((val - mean), 2); + } + sd = sd / delta_list.size(); + sd = std::sqrt(sd); + + ui->mass_precision_mean_label->setText(QString::number(mean,'f',10)); + ui->mass_precision_median_label->setText(QString::number(median,'f',10)); + ui->mass_precision_sd_label->setText(QString::number(sd,'f',10)); + + + std::vector< std::pair<pappso::pappso_double, size_t >> histogram = Utils::getHistogram(delta_list, 100); + // generate some data: + QVector<double> x, y; + for (std::pair<pappso::pappso_double, size_t > & mass_pair: histogram) + { + x.push_back(mass_pair.first); + y.push_back(mass_pair.second); + } + + delete _p_bars; + _p_bars = new QCPBars(ui->mass_histogram_widget->xAxis, ui->mass_histogram_widget->yAxis); + _p_bars->clearData(); + _p_bars->setWidth((x[0] - x[x.size()-1])/x.size()); + _p_bars->setData(x, y); + _p_bars->rescaleAxes(); + //ui->mass_histogram_widget->yAxis->setRange(0, *std::max(y.begin(), y.end())); + //ui->mass_histogram_widget->xAxis->setRange(x[0], x[x.size()-1]); + //QCPGraph * p_graph = ui->mass_histogram_widget->graph(); + //p_graph->clearData(); + //p_graph->setData(x,y); + ui->mass_histogram_widget->rescaleAxes(); + //p_graph->rescaleAxes(true); + ui->mass_histogram_widget->replot(); + } + catch (pappso::PappsoException exception_pappso) { + ui->mass_precision_mean_label->setText("0"); + ui->mass_precision_median_label->setText("0"); + ui->mass_precision_sd_label->setText("0"); + QMessageBox::warning(this, + tr("Unable to compute mass precision :"), exception_pappso.qwhat()); + } + catch (std::exception exception_std) { + ui->mass_precision_mean_label->setText("0"); + ui->mass_precision_median_label->setText("0"); + ui->mass_precision_sd_label->setText("0"); + QMessageBox::warning(this, + tr("Unable to compute mass precision :"), exception_std.what()); + } + qDebug() << "ProjectWindow::computeMassPrecision end"; +} + + Project * ProjectWindow::getProjectP() { return _project_sp.get(); } @@ -248,90 +337,6 @@ void ProjectWindow::computeFdr() { qDebug() << "ProjectWindow::computeFdr end"; } -void ProjectWindow::computeMassPrecision() { - qDebug() << "ProjectWindow::computeMassPrecision begin"; - try { - ValidationState state = ValidationState::validAndChecked; - std::vector< pappso::pappso_double> delta_list; - pappso::PrecisionUnit unit = pappso::PrecisionUnit::dalton; - if (ui->precision_unit_combobox->currentText() == "ppm") { - unit = pappso::PrecisionUnit::ppm; - } - - for (IdentificationGroup * identification_group : _project_sp.get()->getIdentificationGroupList()) { - identification_group->collectMhDelta(delta_list, unit, state); - } - - - qDebug() << "ProjectWindow::computeMassPrecision accumulate"; - pappso::pappso_double sum = std::accumulate(delta_list.begin(), delta_list.end(), 0); - - qDebug() << "ProjectWindow::computeMassPrecision delta_list.size()=" << delta_list.size(); - pappso::pappso_double mean = 0; - if (delta_list.size() > 0) { - mean = sum / ((pappso::pappso_double) delta_list.size()); - } - else { - throw pappso::PappsoException(QObject::tr("division by zero : no valid peptide found. Please check your filter parameters (decoy regexp or database particularly)")); - } - - std::sort(delta_list.begin(), delta_list.end()); - pappso::pappso_double median = delta_list[(delta_list.size()/2)]; - - - qDebug() << "ProjectWindow::computeMassPrecision sd"; - pappso::pappso_double sd = 0; - for (pappso::pappso_double val : delta_list) { - //sd = sd + ((val - mean) * (val - mean)); - sd += std::pow((val - mean), 2); - } - sd = sd / delta_list.size(); - sd = std::sqrt(sd); - - ui->mass_precision_mean_label->setText(QString::number(mean,'f',10)); - ui->mass_precision_median_label->setText(QString::number(median,'f',10)); - ui->mass_precision_sd_label->setText(QString::number(sd,'f',10)); - - - std::vector< std::pair<pappso::pappso_double, size_t >> histogram = Utils::getHistogram(delta_list, 100); - // generate some data: - QVector<double> x, y; - for (std::pair<pappso::pappso_double, size_t > & mass_pair: histogram) - { - x.push_back(mass_pair.first); - y.push_back(mass_pair.second); - } - - //delete _p_bars; - //_p_bars = new QCPBars(ui->mass_histogram_widget->xAxis, ui->mass_histogram_widget->yAxis); - _p_bars->clearData(); - _p_bars->setWidth((x[0] - x[x.size()-1])/x.size()); - _p_bars->setData(x, y); - _p_bars->rescaleAxes(true); - ui->mass_histogram_widget->yAxis->setRange(0, *std::max(y.begin(), y.end())); - ui->mass_histogram_widget->xAxis->setRange(x[0], x[x.size()-1]); - //QCPGraph * p_graph = ui->mass_histogram_widget->graph(); - //p_graph->setData(x,y); - //ui->mass_histogram_widget->rescaleAxes(); - ui->mass_histogram_widget->replot(); - } - catch (pappso::PappsoException exception_pappso) { - ui->mass_precision_mean_label->setText("0"); - ui->mass_precision_median_label->setText("0"); - ui->mass_precision_sd_label->setText("0"); - QMessageBox::warning(this, - tr("Unable to compute mass precision :"), exception_pappso.qwhat()); - } - catch (std::exception exception_std) { - ui->mass_precision_mean_label->setText("0"); - ui->mass_precision_median_label->setText("0"); - ui->mass_precision_sd_label->setText("0"); - QMessageBox::warning(this, - tr("Unable to compute mass precision :"), exception_std.what()); - } - qDebug() << "ProjectWindow::computeMassPrecision end"; -} - void ProjectWindow::doFdrChanged() { qDebug() << "ProjectWindow::doFdrChanged begin "; try { -- GitLab