39 qDebug() <<
"QCPSpectrum::QCPSpectrum begin";
41 setFocusPolicy(Qt::ClickFocus);
52 QCPMarginGroup *group =
new QCPMarginGroup(
this);
53 this->axisRect()->setMarginGroup(QCP::msLeft | QCP::msRight, group);
57 _p_peak_bars->setWidthType(QCPBars::WidthType::wtAbsolute);
76 connect(this->xAxis, SIGNAL(rangeChanged(QCPRange)),
this, SLOT(
setMzRangeChanged(QCPRange)));
79 std::vector<Enums::PeptideIon> all_ion_list = {
94 qDebug() <<
"SpectrumWidget::setVisibleMassDelta 5";
98 QCPBars *p_peak_bars =
new QCPBars(xAxis, yAxis);
99 p_peak_bars->setWidthType(QCPBars::WidthType::wtAbsolute);
103 p_peak_bars->setVisible(
true);
104 _map_ion_type_bars.insert(std::pair<Enums::PeptideIon, QCPBars *>(ion_type, p_peak_bars));
106 qDebug() <<
"SpectrumWidget::setVisibleMassDelta visible ?";
107 setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
117 this->plotLayout()->setRowSpacing(0);
120 this->setAutoAddPlottableToLegend(
false);
124 _p_delta_graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 4.0));
136 SIGNAL(rangeChanged(QCPRange)),
144 qDebug() <<
"QCPSpectrum::QCPSpectrum end";
157 if((spectrum !=
nullptr) && (spectrum->size() != 0))
167 _mz_range.lower = spectrum->front().x - 1;
168 _mz_range.upper = spectrum->back().x + 1;
212 qDebug() <<
"QCPSpectrum::setMzRangeChanged _mz_range.lower" <<
_mz_range.lower;
225 xAxis->setRange(range);
237 _p_peak_bars->setData(QVector<double>(), QVector<double>());
247 pair_ion_bar.second->setData(QVector<double>(), QVector<double>());
248 pair_ion_bar.second->data().clear();
269 if(event->key() == Qt::Key_Control)
273 qDebug() <<
"QCPSpectrum::keyPressEvent end";
279 if(event->key() == Qt::Key_Control)
283 qDebug() <<
"QCPSpectrum::keyReleaseEvent end";
294#if QT_VERSION < 0x060000
296 _old_y = yAxis->pixelToCoord(event->y());
298 _old_x =
event->position().x();
299 _old_y = yAxis->pixelToCoord(event->position().y());
318#if QT_VERSION < 0x060000
329#if QT_VERSION < 0x060000
342 this->yAxis->scaleRange(
_old_y /
y, 0);
348#if QT_VERSION < 0x060000
349 this->xAxis->moveRange(xAxis->pixelToCoord(
_old_x) - xAxis->pixelToCoord(event->x()));
351 this->xAxis->moveRange(xAxis->pixelToCoord(
_old_x) -
352 xAxis->pixelToCoord(event->position().x()));
356#if QT_VERSION < 0x060000
359 _old_x =
event->position().x();
382 p_peak_match =
nullptr;
388 if((peak.x > min) && (peak.x < max))
390 if(p_peak_match ==
nullptr)
392 p_peak_match = &peak;
396 if(fabs(mz - peak.x) < fabs(mz - p_peak_match->
x))
398 p_peak_match = &peak;
403 _parent->peakChangeEvent(p_peak_match);
414 p_peak_match =
nullptr;
420 if((peak.x > min) && (peak.x < max))
422 if(p_peak_match ==
nullptr)
424 p_peak_match = &peak;
428 if(p_peak_match->
y < peak.y)
430 p_peak_match = &peak;
435 _parent->peakChangeEvent(p_peak_match);
445 double diff = peak_ion_match.
getPeak().
x -
467 const std::vector<pappso::PeptideNaturalIsotopeAverageSp> &isotope_mass_list,
471 ((
pappso_double)1.0 / isotope_mass_list.at(0).get()->getIntensityRatio()) * intensity;
475 peptide.get()->getIntensityRatio() * total_intensity);
484 MzRange range(precursor_mz, ms2_precision);
485 double precursor_mz_c13 = precursor_mz + (
DIFFC12C13 / charge);
486 MzRange range_c13(precursor_mz_c13, ms2_precision);
490 if(((peak.x > range.
lower()) && (peak.x < range.
upper())) ||
491 ((peak.x > range_c13.lower()) && (peak.x < range_c13.upper())))
494 QCPItemText *text_label =
new QCPItemText(
this);
495 text_label->setVisible(
true);
496 text_label->setPositionAlignment(Qt::AlignBottom | Qt::AlignHCenter);
497 text_label->position->setType(QCPItemPosition::ptPlotCoords);
498 text_label->position->setCoords(peak.x, peak.y);
500 text_label->setFont(QFont(font().family(), 8));
501 text_label->setText(
"precursor");
502 text_label->setColor(Qt::cyan);
Class to represent a mass spectrum.
pappso_double lower() const
pappso_double upper() const
virtual const PeptideNaturalIsotopeAverageSp & getPeptideNaturalIsotopeAverageSp() const
const DataPoint & getPeak() const
Enums::PeptideIon getPeptideIonType() const
static const QColor getPeptideIonColor(Enums::PeptideIon ion_type)
pappso_double getMz() const
QCPGraph * _p_delta_graph
void highlightPrecursorPeaks(double precursor_mz, int charge, PrecisionPtr ms2_precision)
virtual void keyPressEvent(QKeyEvent *event) override
QCPAxisRect * _p_delta_axis_rect
MassSpectrumWidget * _parent
QCPRange _mass_delta_range
void addPeakIonIsotopeMatch(const PeakIonIsotopeMatch &peak_ion_match)
QCPSpectrum(MassSpectrumWidget *parent, bool visible)
virtual void mouseReleaseEvent(QMouseEvent *event) override
friend class MassSpectrumWidget
QCPRange _intensity_range
void addMassDelta(const PeakIonIsotopeMatch &peak_ion_match)
void getNearestPeakBetween(pappso_double mz, pappso_double mouse_mz_range) const
virtual void mouseMoveEvent(QMouseEvent *event) override
pappso::pappso_double _old_x
void getMostIntensePeakBetween(pappso_double mz, pappso_double mouse_mz_range) const
QCPBars * mp_peak_bars_precursor
void setSpectrumP(const MassSpectrum *spectrum)
std::map< Enums::PeptideIon, QCPBars * > _map_ion_type_bars
void addMs1IsotopePattern(const std::vector< pappso::PeptideNaturalIsotopeAverageSp > &isotope_mass_list, pappso_double intensity)
virtual void keyReleaseEvent(QKeyEvent *event) override
QCPBars * _p_peak_bars_isotope
const MassSpectrum * _p_spectrum
virtual void mousePressEvent(QMouseEvent *event) override
Q_SLOT void setMzRangeChanged(QCPRange range)
pappso::pappso_double _old_y
PeptideIon
Enums::PeptideIon enum defines all types of ions (Nter or Cter).
@ astar
Nter aldimine ions + NH3 loss.
@ ystar
Cter amino ions + NH3 loss.
@ yo
Cter amino ions + H2O loss.
@ bstar
Nter acylium ions + NH3 loss.
@ bo
Nter acylium ions + H2O loss.
@ ao
Nter aldimine ions + H2O loss.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
double pappso_double
A type definition for doubles.
std::shared_ptr< const PeptideNaturalIsotopeAverage > PeptideNaturalIsotopeAverageSp
const PrecisionBase * PrecisionPtr
const pappso_double DIFFC12C13(1.0033548378)