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

Merge branch 'renne' into 'master'

Allow to use TDF raw data to load MGF spectrum

See merge request !26
parents 32fe88e6 18917fbc
No related branches found
No related tags found
1 merge request!26Allow to use TDF raw data to load MGF spectrum
......@@ -29,6 +29,7 @@
#include <QFileInfo>
#include "../msrun.h"
#include "../peptideevidence.h"
#include <pappsomspp/msrun/private/timsmsrunreaderms2.h>
IdentificationDataSource::IdentificationDataSource(const QString resource_name)
{
......@@ -216,6 +217,7 @@ IdentificationDataSource::getMassSpectrumCstSPtr(unsigned int scan_number) const
if(_ms_run_sp.get()->getMzFormat() == pappso::MzFormat::MGF)
{
scan_number = scan_number - 1;
qDebug() << "MGF format";
}
pappso::MsRunReaderSPtr msrun_reader_sp =
_ms_run_sp.get()->getMsRunReaderSPtr();
......@@ -259,6 +261,89 @@ IdentificationDataSource::getMassSpectrumCstSPtr(unsigned int scan_number) const
return spectrum_sp;
}
pappso::MassSpectrumCstSPtr
IdentificationDataSource::getMassSpectrumCstSPtrMgfToTdf(
unsigned int scan_number,
QString tdf_file,
int charge,
double mz_val,
double rt_sec,
double k0) const
{
qDebug() << "scan=" << scan_number;
if(_ms_run_sp.get()->getMzFormat() != pappso::MzFormat::MGF)
{
throw pappso::ExceptionNotFound(
QObject::tr("mz data \"%1\" not a MGF format")
.arg(_ms_run_sp.get()->getFileName()));
}
scan_number = scan_number - 1;
pappso::MsRunReaderSPtr msrun_reader_sp =
_ms_run_sp.get()->getMsRunReaderSPtrMgfToTdf(tdf_file);
if(msrun_reader_sp == nullptr)
{
msrun_reader_sp = _ms_run_sp.get()->findMsRunFile();
if(msrun_reader_sp == nullptr)
{
throw pappso::ExceptionNotFound(
QObject::tr("mz data \"%1\" file not found").arg(tdf_file));
}
}
msrun_reader_sp = _ms_run_sp.get()->getMsRunReaderSPtrMgfToTdf(tdf_file);
if(msrun_reader_sp == nullptr)
{
throw pappso::ExceptionNotFound(
QObject::tr("mz data \"%1\" file not found").arg(tdf_file));
}
// qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ <<
// _ms_run_sp.get()->getMsRunReaderSp().get()->getSpectrumListSize();
std::size_t spectrum_index = scan_number;
qDebug();
if(msrun_reader_sp.get()->hasScanNumbers())
{
qDebug() << "HAS SCAN NUMBERS";
spectrum_index =
msrun_reader_sp.get()->scanNumber2SpectrumIndex(scan_number);
}
std::vector<std::size_t> spectrum_result;
pappso::TimsMsRunReaderMs2 *tims2_reader =
dynamic_cast<pappso::TimsMsRunReaderMs2 *>(msrun_reader_sp.get());
if(tims2_reader != nullptr)
{
spectrum_result =
tims2_reader->getPrecursorsIDFromMzRt(charge, mz_val, rt_sec, k0);
}
qDebug() << spectrum_result.size();
if(spectrum_result.size() == 0)
{
throw pappso::ExceptionNotFound(
QObject::tr("The SQL request doesn't found any TDF scan "
"associated"));
}
if(spectrum_result.size() > 1)
{
throw pappso::ExceptionNotFound(
QObject::tr("The SQL request found more than 1 TDF scan "
"associated"));
}
spectrum_index = spectrum_result[0] * 2 - 1;
qDebug() << " spectrum index=" << spectrum_index;
pappso::MassSpectrumCstSPtr spectrum_sp =
msrun_reader_sp.get()->massSpectrumCstSPtr(spectrum_index);
qDebug();
return spectrum_sp;
}
void
IdentificationDataSource::addFastaFile(FastaFileSp file)
{
......
......@@ -63,8 +63,16 @@ class IdentificationDataSource
* */
virtual pappso::MassSpectrumCstSPtr
getMassSpectrumCstSPtr(unsigned int scan_number) const;
/** @brief get the spectrum from MGF values such as precursor mz, precursor
* charge, RT and K0
* */
pappso::MassSpectrumCstSPtr
getMassSpectrumCstSPtrMgfToTdf(unsigned int scan_number,
QString tdf_file,
int charge,
double mz_val,
double rt_sec,
double k0) const;
/** \brief read source content to store it in project
*/
virtual void parseTo(Project *p_project) = 0;
......
......@@ -69,77 +69,94 @@ MsRun::getMsRunReaderSPtr()
// qDebug() << " filename=" << getFileName();
if(_msrun_reader_sp == nullptr)
{
qDebug() << " runid=" << getRunId() << " xmlid=" << getXmlId();
pappso::MsFileAccessor *p_accessor = nullptr;
setMsRunReaderSp(getFileName());
}
return _msrun_reader_sp;
}
pappso::MsRunReaderSPtr &
MsRun::getMsRunReaderSPtrMgfToTdf(QString tdf_file)
{
qDebug() << " filename=" << getFileName();
qDebug() << "filenameTDF = " << tdf_file;
if(_msrun_reader_sp == nullptr)
{
setMsRunReaderSp(tdf_file);
}
return _msrun_reader_sp;
}
void
MsRun::setMsRunReaderSp(QString ms_run_file)
{
qDebug() << " runid=" << getRunId() << " xmlid=" << getXmlId();
pappso::MsFileAccessor *p_accessor = nullptr;
try
{
p_accessor = new pappso::MsFileAccessor(ms_run_file, "runa1");
p_accessor->setPreferedFileReaderType(pappso::MzFormat::brukerTims,
pappso::FileReaderType::tims_ms2);
}
catch(pappso::ExceptionNotFound &error)
{
qDebug() << "not found";
_msrun_reader_sp = nullptr;
/// p_accessor = nullptr;
// throw error;
// file not found, don't throw exception, we'll try another location
}
if(p_accessor != nullptr)
{
try
{
_msrun_reader_sp =
p_accessor->getMsRunReaderSPtrByRunId(getRunId(), getXmlId());
delete p_accessor;
p_accessor = nullptr;
// pappso::MsFileAccessor accessor(getFileName(), "");
p_accessor = new pappso::MsFileAccessor(getFileName(), "runa1");
p_accessor->setPreferedFileReaderType(
pappso::MzFormat::brukerTims, pappso::FileReaderType::tims_ms2);
}
catch(pappso::ExceptionNotFound &error)
{
qDebug() << "not found";
_msrun_reader_sp = nullptr;
/// p_accessor = nullptr;
// throw error;
// file not found, don't throw exception, we'll try another location
}
if(p_accessor != nullptr)
{
try
qDebug() << m_centroidOptions;
if(!m_centroidOptions.isEmpty())
{
_msrun_reader_sp =
p_accessor->getMsRunReaderSPtrByRunId(getRunId(), getXmlId());
delete p_accessor;
p_accessor = nullptr;
//qDebug() << m_centroidOptions;
if(!m_centroidOptions.isEmpty())
pappso::TimsMsRunReaderMs2 *tims2_reader =
dynamic_cast<pappso::TimsMsRunReaderMs2 *>(
_msrun_reader_sp.get());
if(tims2_reader != nullptr)
{
pappso::TimsMsRunReaderMs2 *tims2_reader =
dynamic_cast<pappso::TimsMsRunReaderMs2 *>(
_msrun_reader_sp.get());
if(tims2_reader != nullptr)
{
qDebug() << m_centroidOptions;
QStringList option_list = m_centroidOptions.split(" ");
std::shared_ptr<pappso::FilterPseudoCentroid> ms2filter =
std::make_shared<pappso::FilterPseudoCentroid>(
option_list.at(0).toDouble(),
option_list.at(1).toDouble(),
option_list.at(2).toDouble(),
option_list.at(3).toDouble());
tims2_reader->setMs2FilterCstSPtr(ms2filter);
qDebug() << m_centroidOptions;
}
qDebug() << m_centroidOptions;
QStringList option_list = m_centroidOptions.split(" ");
std::shared_ptr<pappso::FilterPseudoCentroid> ms2filter =
std::make_shared<pappso::FilterPseudoCentroid>(
option_list.at(0).toDouble(),
option_list.at(1).toDouble(),
option_list.at(2).toDouble(),
option_list.at(3).toDouble());
tims2_reader->setMs2FilterCstSPtr(ms2filter);
qDebug() << m_centroidOptions;
}
}
}
catch(pappso::PappsoException &error2)
catch(pappso::PappsoException &error2)
{
_msrun_reader_sp = nullptr;
if(p_accessor != nullptr)
{
_msrun_reader_sp = nullptr;
if(p_accessor != nullptr)
{
delete p_accessor;
p_accessor = nullptr;
}
throw error2;
delete p_accessor;
p_accessor = nullptr;
}
throw error2;
}
}
else
{
// qDebug();
}
return _msrun_reader_sp;
}
void
MsRun::freeMsRunReaderSp()
{
......
......@@ -78,6 +78,8 @@ class MsRun : public pappso::MsRunId
pappso::MsRunReaderSPtr findMsRunFile();
pappso::MsRunReaderSPtr &getMsRunReaderSPtr();
pappso::MsRunReaderSPtr &getMsRunReaderSPtrMgfToTdf(QString tdf_file);
void setMsRunReaderSp(QString ms_run_file);
/** @brief release shared pointer on MSrun reader
*/
......
......@@ -14,7 +14,7 @@
</rect>
</property>
<property name="windowTitle">
<string>About</string>
<string>Settings</string>
</property>
<property name="sizeGripEnabled">
<bool>false</bool>
......@@ -161,6 +161,44 @@
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Raw data used in spectrum(MGF file)</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QRadioButton" name="mgf_button">
<property name="text">
<string>&amp;MGF</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="tdf_button">
<property name="text">
<string>&amp;TDF</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
......
......@@ -37,11 +37,14 @@
#include <QProcess>
#include <pappsomspp/exception/exceptionnotfound.h>
#include <QMessageBox>
#include "gui/mainwindow.h"
EditSettings::EditSettings(QWidget *parent)
EditSettings::EditSettings(MainWindow *parent)
: QDialog(parent), ui(new Ui::EditSettingsDialog)
{
ui->setupUi(this);
mp_mainWindow = parent;
QSettings settings;
QString xic_extraction_method =
settings.value("global/xic_extractor", "pwiz").toString();
......@@ -54,9 +57,20 @@ EditSettings::EditSettings(QWidget *parent)
QString tandemwrapper_path =
settings.value("timstof/tandemwrapper_path", "").toString();
QString tmp_dir_path = settings.value("timstof/tmp_dir_path", "").toString();
QString spectrum_load_method =
settings.value("timstof/spectrum_load_method", "mgf").toString();
ui->tandemwrapper_path_line->setText(tandemwrapper_path);
ui->tmp_dir_line->setText(tmp_dir_path);
ui->tdf_button->setChecked(true);
if(spectrum_load_method == "mgf")
{
ui->mgf_button->setChecked(true);
}
connect(this,
&EditSettings::operateFreeAllMsRunReaders,
mp_mainWindow,
&MainWindow::doFreeAllMsRunReaders);
}
......@@ -106,6 +120,14 @@ EditSettings::done(int r)
settings.setValue("timstof/tmp_dir_path", tmp_dir_path);
}
QString spectrum_load_method = "mgf";
if(ui->tdf_button->isChecked())
{
spectrum_load_method = "tdf";
}
settings.setValue("timstof/spectrum_load_method", spectrum_load_method);
emit operateFreeAllMsRunReaders();
QDialog::done(r);
return;
}
......
......@@ -33,6 +33,8 @@
#include <QDialog>
#include <QFileInfo>
class MainWindow;
namespace Ui
{
class EditSettingsDialog;
......@@ -43,7 +45,7 @@ class EditSettings : public QDialog
Q_OBJECT
public:
explicit EditSettings(QWidget *parent = 0);
explicit EditSettings(MainWindow *parent = 0);
~EditSettings();
protected:
......@@ -54,6 +56,10 @@ class EditSettings : public QDialog
void selectTandemWrapperPath();
void selectTmpDirPath();
signals:
void operateFreeAllMsRunReaders();
private:
Ui::EditSettingsDialog *ui;
MainWindow *mp_mainWindow = nullptr;
};
......@@ -84,6 +84,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::Main)
&HttpVersion::httpVersionReady,
this,
&MainWindow::doCheckNewVersion);
connect(this,
&MainWindow::operateFreeAllMsRunReaders,
_project_window,
&ProjectWindow::doCleanMsRunReaders);
#else
#endif
}
......@@ -893,3 +898,9 @@ MainWindow::getWorkerThread()
{
return mp_worker;
}
void
MainWindow::doFreeAllMsRunReaders()
{
emit operateFreeAllMsRunReaders();
}
......@@ -101,6 +101,7 @@ class MainWindow : public QMainWindow
void doGroupingFinished();
void doActionSpectralCountingMcq();
void doCheckNewVersion();
void doFreeAllMsRunReaders();
// void peptideEdited(QString peptideStr);
// void setColor(const QColor &color);
// void setShape(Shape shape);
......@@ -126,6 +127,7 @@ class MainWindow : public QMainWindow
void operateGrouping(ProjectSp project_sp);
void operateRunningXtandem(TandemRunBatch tandem_run_batch);
void projectNameChanged(QString project_name);
void operateFreeAllMsRunReaders();
protected:
void closeEvent(QCloseEvent *event) override;
......
......@@ -42,11 +42,53 @@ SpectrumSpLoaderThread::doLoadSpectrumSp(PeptideEvidence *p_peptide_evidence)
{
qDebug() << "SpectrumSpLoaderThread::doLoadSpectrumSp begin";
pappso::MassSpectrumCstSPtr spectrum;
QSettings settings;
QString spectrum_load_method =
settings.value("timstof/spectrum_load_method", "mgf").toString();
try
{
spectrum =
p_peptide_evidence->getIdentificationDataSource()
->getMassSpectrumCstSPtr(p_peptide_evidence->getScanNumber());
QString tdf_file =
QFileInfo(p_peptide_evidence->getIdentificationDataSource()
->getMsRunSp()
->getFileName())
.absoluteDir()
.absolutePath() +
"/analysis.tdf";
if(QFileInfo(tdf_file).exists())
{
if(spectrum_load_method == "mgf")
{
spectrum =
p_peptide_evidence->getIdentificationDataSource()
->getMassSpectrumCstSPtr(p_peptide_evidence->getScanNumber());
}
else
{
QString tdf_file =
QFileInfo(p_peptide_evidence->getIdentificationDataSource()
->getMsRunSp()
->getFileName())
.absoluteDir()
.absolutePath() +
"/analysis.tdf";
spectrum = p_peptide_evidence->getIdentificationDataSource()
->getMassSpectrumCstSPtrMgfToTdf(
p_peptide_evidence->getScanNumber(),
tdf_file,
p_peptide_evidence->getCharge(),
p_peptide_evidence->getExperimentalMz(),
p_peptide_evidence->getRetentionTime(),
0.99); // TODO add the K0 param
}
}
else
{
spectrum =
p_peptide_evidence->getIdentificationDataSource()
->getMassSpectrumCstSPtr(p_peptide_evidence->getScanNumber());
}
emit spectrumSpReady(spectrum, QString(""), QString(""));
}
......
......@@ -1124,3 +1124,16 @@ ProjectWindow::getPtmMode()
return ptm_mode;
}
void
ProjectWindow::doCleanMsRunReaders()
{
if(_project_sp.get() != nullptr)
{
for(MsRunSp ms_run_sp : _project_sp.get()->getMsRunStore().getMsRunList())
{
qDebug() << "free reader of " << ms_run_sp.get()->getFileName();
ms_run_sp.get()->freeMsRunReaderSp();
}
}
}
......@@ -92,9 +92,11 @@ class ProjectWindow : public QMainWindow
void doProjectStatusChanged();
void doFindBestMsRunInAlignmentGroup(MsRunAlignmentGroupSp);
void doBestMsRunForAlignmentFinished(MsRunSp msrun_sp);
void doCleanMsRunReaders();
// void setColor(const QColor &color);
// void setShape(Shape shape);
signals:
void identificationGroupGrouped(IdentificationGroup *p_identification_group);
void
......
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