diff --git a/src/core/libmaven/PeakGroup.cpp b/src/core/libmaven/PeakGroup.cpp index 3a97222ba3..c485faa708 100644 --- a/src/core/libmaven/PeakGroup.cpp +++ b/src/core/libmaven/PeakGroup.cpp @@ -862,8 +862,10 @@ vector PeakGroup::getFragmentationEvents() mzSample* sample = peak.getSample(); if (sample == nullptr) continue; - if (sample->ms2ScanCount() == 0) + if (sample->ms2ScanCount() == 0 + || sample->msMsType() != mzSample::MsMsType::DDA) { continue; + } mzSlice slice(minMz, maxMz, peak.rtmin, peak.rtmax); vector scans = sample->getFragmentationEvents(&slice); diff --git a/src/core/libmaven/mzSample.cpp b/src/core/libmaven/mzSample.cpp index e24ef7f0e6..321a436cdf 100644 --- a/src/core/libmaven/mzSample.cpp +++ b/src/core/libmaven/mzSample.cpp @@ -25,6 +25,7 @@ mzSample::mzSample() : _setName(""), injectionOrder(0) _id = -1; _numMS1Scans = 0; _numMS2Scans = 0; + _msMsType = MsMsType::None; maxMz = maxRt = 0; minMz = minRt = 0; isBlank = false; diff --git a/src/core/libmaven/mzSample.h b/src/core/libmaven/mzSample.h index 22c31ec6e2..4f9ab960b4 100644 --- a/src/core/libmaven/mzSample.h +++ b/src/core/libmaven/mzSample.h @@ -180,8 +180,13 @@ class mzLink */ class mzSample { +public: + enum class MsMsType { + DDA, + PRM, + None + }; - public: /** * @brief Constructor for class mzSample */ @@ -681,6 +686,9 @@ class mzSample vector getIntensityDistribution(int mslevel); + inline void setMsMsType(MsMsType msMsType) { _msMsType = msMsType; } + inline MsMsType msMsType() const { return _msMsType; } + deque scans; string sampleName; string fileName; @@ -728,6 +736,7 @@ class mzSample int _id; unsigned int _numMS1Scans; unsigned int _numMS2Scans; + MsMsType _msMsType; void sampleNaming(const char *filename); void checkSampleBlank(const char *filename); diff --git a/src/gui/mzroll/eicwidget.cpp b/src/gui/mzroll/eicwidget.cpp index ce04fa6645..e472080809 100644 --- a/src/gui/mzroll/eicwidget.cpp +++ b/src/gui/mzroll/eicwidget.cpp @@ -2120,7 +2120,11 @@ void EicWidget::addMS2Events(float mzmin, float mzmax) int count = 0; for (auto const& sample : samples) { - if (sample->ms1ScanCount() == 0) continue; + if (sample->ms1ScanCount() == 0 + || sample->msMsType() != mzSample::MsMsType::DDA) { + continue; + } + for (auto const& scan : sample->scans) { if (scan->mslevel == 2 && scan->precursorMz >= mzmin && scan->precursorMz <= mzmax) { diff --git a/src/gui/mzroll/mainwindow.cpp b/src/gui/mzroll/mainwindow.cpp index d95dc3ab22..de127ab00c 100644 --- a/src/gui/mzroll/mainwindow.cpp +++ b/src/gui/mzroll/mainwindow.cpp @@ -605,6 +605,10 @@ using namespace mzUtils; SIGNAL(sampleLoaded()), this, SLOT(_warnIfNISTPolarityMismatch())); + connect(fileLoader, + &mzFileIO::sampleLoaded, + this, + &MainWindow::_confirmMsMsType); connect(fileLoader,SIGNAL(sampleLoaded()), this, SLOT(setInjectionOrderFromTimeStamp())); connect(fileLoader,SIGNAL(sampleLoaded()),projectDockWidget, SLOT(updateSampleList())); @@ -1543,8 +1547,6 @@ void MainWindow::setCompoundFocus(Compound* compound, if (fragPanel->isVisible()) showFragmentationScans(mz); - QString compoundName(compound->name().c_str()); - if (compound) setUrl(compound); } @@ -2143,6 +2145,38 @@ void MainWindow::_warnIfNISTPolarityMismatch() } } +void MainWindow::_confirmMsMsType() +{ + QList msMsSamples; + for (auto sample : samples) { + if (sample->ms1ScanCount() > 0 && sample->ms2ScanCount() > 0) + msMsSamples.append(sample); + } + + if (msMsSamples.isEmpty()) + return; + + // TODO: add DIA when/if SWATH branch is merged + QStringList msMsTypes; + msMsTypes << tr("DDA") << tr("PRM"); + + QString type = QInputDialog::getItem(this, + tr("Select MS/MS type"), + tr("One or more samples have MS/MS " + "data. Please tell El-MAVEN the\n" + "acquisition type of this data:"), + msMsTypes, + 0, + false); + for (auto sample : msMsSamples) { + if (type == "PRM") { + sample->setMsMsType(mzSample::MsMsType::PRM); + } else { + sample->setMsMsType(mzSample::MsMsType::DDA); + } + } +} + void MainWindow::setLastLoadedDatabase(QString filename) { QFileInfo fileInfo(filename); @@ -4002,8 +4036,10 @@ void MainWindow::showFragmentationScans(float pmz) return; fragPanel->clearTree(); for (auto sample : samples) { - if (sample->ms1ScanCount() == 0) + if (sample->ms1ScanCount() == 0 + || sample->msMsType() != mzSample::MsMsType::DDA) { continue; + } for (auto scan : sample->scans) { if (scan->mslevel != 2) continue; diff --git a/src/gui/mzroll/mainwindow.h b/src/gui/mzroll/mainwindow.h index cdd4a814a8..b6b8a937d1 100644 --- a/src/gui/mzroll/mainwindow.h +++ b/src/gui/mzroll/mainwindow.h @@ -494,6 +494,7 @@ private Q_SLOTS: void _postProjectLoadActions(); void _handleUnrecognizedProjectVersion(QString projectFilename); + void _confirmMsMsType(); private: Controller* _controller; diff --git a/src/gui/mzroll/peakdetectiondialog.cpp b/src/gui/mzroll/peakdetectiondialog.cpp index 459622eb6f..4cbc2eeaf5 100644 --- a/src/gui/mzroll/peakdetectiondialog.cpp +++ b/src/gui/mzroll/peakdetectiondialog.cpp @@ -448,8 +448,9 @@ void PeakDetectionDialog::toggleFragmentation() auto iter = find_if(begin(samples), end(samples), [](mzSample* s) { - return ((s->ms1ScanCount() > 0) - && (s->ms2ScanCount() > 0)); + return (s->ms1ScanCount() > 0 + && s->ms2ScanCount() > 0 + && s->msMsType() == mzSample::MsMsType::DDA); }); bool foundDda = iter != end(samples);