Commit 30f99ca7 authored by Langella Olivier's avatar Langella Olivier
Browse files

WIP: exporting q-values in ODS

parent d1b6a7ab
......@@ -145,6 +145,7 @@ SET(CPP_FILES
output/ods/peptidepossheet.cpp
output/ods/peptidesheet.cpp
output/ods/proteinsheet.cpp
output/ods/qvaluessheet.cpp
output/ods/samplesheet.cpp
output/ods/simplesheet.cpp
output/ods/spectrasheet.cpp
......
......@@ -535,7 +535,7 @@ WorkerThread::doWritingOdsFile(QString filename,
p_writer = new OdsDocWriter(filename);
}
OdsExport export_ods(project_sp.get());
OdsExport export_ods(project_sp);
try
{
export_ods.write(p_writer, _p_work_monitor);
......
......@@ -34,6 +34,7 @@
#include "peptidesheet.h"
#include "spectrasheet.h"
#include "peptidepossheet.h"
#include "qvaluessheet.h"
#include "comparspectrasheet.h"
#include "comparspecificspectrasheet.h"
#include "comparspectrabypeptide.h"
......@@ -46,7 +47,7 @@
#include <odsstream/odsexception.h>
#include <pappsomspp/pappsoexception.h>
OdsExport::OdsExport(const Project *project) : _p_project(project)
OdsExport::OdsExport(ProjectSp project) : _p_project(project)
{
}
void
......@@ -76,36 +77,36 @@ OdsExport::write(CalcWriterInterface *p_writer, WorkMonitorInterface *p_monitor)
style.setBackgroundColor(QColor("orange"));
_even_style = p_writer->getTableCellStyleRef(style);
InfoSheet(this, p_writer, _p_project);
InfoSheet(this, p_writer, _p_project.get());
if(settings.value("export_ods/groups", "true").toBool())
{
p_monitor->message(QObject::tr("writing groups"));
GroupingSheet(this, p_writer, _p_project);
GroupingSheet(this, p_writer, _p_project.get());
}
if(settings.value("export_ods/simple", "false").toBool())
{
SimpleSheet(p_writer, _p_project);
SimpleSheet(p_writer, _p_project.get());
}
if(settings.value("export_ods/proteins", "true").toBool())
{
p_monitor->message(QObject::tr("writing proteins"));
ProteinSheet(this, p_writer, _p_project);
ProteinSheet(this, p_writer, _p_project.get());
}
if(settings.value("export_ods/peptides", "true").toBool())
{
p_monitor->message(QObject::tr("writing peptides"));
PeptideSheet(this, p_writer, _p_project);
PeptideSheet(this, p_writer, _p_project.get());
}
if(settings.value("export_ods/spectra", "true").toBool())
{
p_monitor->message(QObject::tr("writing spectra"));
SpectraSheet(this, p_writer, _p_project);
SpectraSheet(this, p_writer, _p_project.get());
}
if(settings.value("export_ods/peptidepos", "true").toBool())
{
p_monitor->message(
QObject::tr("writing peptide and positions on proteins"));
PeptidePosSheet(this, p_writer, _p_project);
PeptidePosSheet(this, p_writer, _p_project.get());
}
if(_p_project->getProjectMode() != ProjectMode::individual)
{
......@@ -116,69 +117,76 @@ OdsExport::write(CalcWriterInterface *p_writer, WorkMonitorInterface *p_monitor)
{
p_monitor->message(
QObject::tr("writing spectra comparisons for peptidomic"));
ComparSpectraByPeptide(this, p_writer, _p_project).writeSheet();
ComparSpectraByPeptide(this, p_writer, _p_project.get())
.writeSheet();
}
if(settings.value("export_ods/comparspectra", "true").toBool())
{
p_monitor->message(QObject::tr("writing spectra comparisons"));
ComparSpectraSheet(this, p_writer, _p_project).writeSheet();
ComparSpectraSheet(this, p_writer, _p_project.get()).writeSheet();
}
if(settings.value("export_ods/comparspecificspectra", "true")
.toBool())
{
p_monitor->message(
QObject::tr("writing specific spectra comparisons"));
ComparSpecificSpectraSheet(this, p_writer, _p_project)
ComparSpecificSpectraSheet(this, p_writer, _p_project.get())
.writeSheet();
}
if(settings.value("export_ods/comparuniquesequence", "true").toBool())
{
p_monitor->message(
QObject::tr("writing unique sequence comparisons"));
ComparSequenceSheet(this, p_writer, _p_project).writeSheet();
ComparSequenceSheet(this, p_writer, _p_project.get())
.writeSheet();
}
if(settings.value("export_ods/comparspecificuniquesequence", "true")
.toBool())
{
p_monitor->message(
QObject::tr("writing specific unique sequence comparisons"));
ComparSpecificSequenceSheet(this, p_writer, _p_project)
ComparSpecificSequenceSheet(this, p_writer, _p_project.get())
.writeSheet();
}
if(settings.value("export_ods/comparpai", "true").toBool())
{
p_monitor->message(QObject::tr("writing PAI comparisons"));
ComparPaiSheet(this, p_writer, _p_project).writeSheet();
ComparPaiSheet(this, p_writer, _p_project.get()).writeSheet();
}
if(settings.value("export_ods/comparempai", "true").toBool())
{
p_monitor->message(QObject::tr("writing emPAI comparisons"));
ComparEmpaiSheet(this, p_writer, _p_project).writeSheet();
ComparEmpaiSheet(this, p_writer, _p_project.get()).writeSheet();
}
if(settings.value("export_ods/comparnsaf", "true").toBool())
{
p_monitor->message(QObject::tr("writing NSAF comparisons"));
ComparNsafSheet(this, p_writer, _p_project).writeSheet();
ComparNsafSheet(this, p_writer, _p_project.get()).writeSheet();
}
}
if(settings.value("export_ods/samples", "true").toBool())
{
p_monitor->message(QObject::tr("writing samples"));
SampleSheet(this, p_writer, _p_project);
SampleSheet(this, p_writer, _p_project.get());
}
if(settings.value("export_ods/qvalues", "true").toBool())
{
p_monitor->message(QObject::tr("writing q-values"));
QvaluesSheet(this, p_writer, _p_project);
}
if(_p_project->hasPtmExperiment())
{
if(settings.value("export_ods/ptmislands", "true").toBool())
{
p_monitor->message(QObject::tr("writing PTM islands"));
PtmIslandSheet(this, p_writer, _p_project);
PtmIslandSheet(this, p_writer, _p_project.get());
}
if(settings.value("export_ods/ptmspectra", "true").toBool())
{
p_monitor->message(QObject::tr("writing PTM spectra"));
PtmSpectraSheet(this, p_writer, _p_project);
PtmSpectraSheet(this, p_writer, _p_project.get());
}
}
}
......
......@@ -28,8 +28,7 @@
*implementation
******************************************************************************/
#ifndef ODSEXPORT_H
#define ODSEXPORT_H
#pragma once
#include "../../core/project.h"
#include <odsstream/calcwriterinterface.h>
......@@ -38,16 +37,14 @@
class OdsExport
{
public:
OdsExport(const Project *project);
OdsExport(ProjectSp project);
void write(CalcWriterInterface *p_writer, WorkMonitorInterface *p_monitor);
void setEvenOrOddStyle(unsigned int number, CalcWriterInterface *p_writer);
private:
const Project *_p_project;
ProjectSp _p_project;
OdsTableCellStyleRef _even_style;
OdsTableCellStyleRef _odd_style;
};
#endif // ODSEXPORT_H
/**
* \file /output/ods/qvaluessheet.cpp
* \date 16/09/2019
* \author Olivier Langella
* \brief ODS Q-values sheet
*/
/*******************************************************************************
* Copyright (c) 2019 Olivier Langella <olivier.langella@u-psud.fr>.
*
* This file is part of XTPcpp.
*
* XTPcpp is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* XTPcpp is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XTPcpp. If not, see <http://www.gnu.org/licenses/>.
*
******************************************************************************/
#include "qvaluessheet.h"
#include "../../core/qvalue/computeqvalues.h"
QvaluesSheet::QvaluesSheet(OdsExport *p_ods_export,
CalcWriterInterface *p_writer,
ProjectSp p_project)
{
_p_writer = p_writer;
_p_ods_export = p_ods_export;
p_writer->writeSheet("q-values");
OdsTableSettings table_settings;
table_settings.setVerticalSplit(1);
_p_writer->setCurrentOdsTableSettings(table_settings);
writeHeaders();
ComputeQvalues qvalues(p_project);
}
void
QvaluesSheet::writeHeaders()
{
// MS sample name X!tandem xml result file name X!Tandem version
// X!tandem xml model file name total spectra used total spectra assigned
// assigned/used percent total unique assigned database file names MS/MS data
// source file name MS/MS data source file path MS level 1 MS level 2 TIC
// mean in MS 1 TIC mean in MS 2 rt min rt max
_p_writer->writeLine();
_p_writer->writeCell("sample ID");
_p_writer->writeCell("sample");
_p_writer->writeCell("MS run file");
_p_writer->writeCell("Identification engine");
_p_writer->writeCell("Identification engine version");
_p_writer->writeCell("Identification result file");
_p_writer->writeCell("Identification fasta files");
_p_writer->writeCell("X!Tandem parameters");
// total_spectra_assigned=1, ///< total_spectra_assigned in one
// identification file (one sample)
_p_writer->setCellAnnotation(
"total spectra assigned in one identification file (one mzdata sample) "
"given by the identification engine");
_p_writer->writeCell("Total spectra assigned");
//
// total_spectra_used=2,///< total_spectra_used in one identification file
// (one sample)
_p_writer->setCellAnnotation(
"total spectra used in one identification file (one mzdata sample) given "
"by the identification engine");
_p_writer->writeCell("Total spectra used");
_p_writer->setCellAnnotation(
"Percentage of spectra assignment (spectra assigned / spectra used");
_p_writer->writeCell("Assignment percentage");
// total_unique_assigned=5,///< total number unique peptide sequence assigned
_p_writer->setCellAnnotation(
"total unique peptide sequence assigned in one identification file (one "
"mzdata sample) given by the identification engine");
_p_writer->writeCell("Total unique assigned");
if(_msrun_statistics)
{
_p_writer->setCellAnnotation(
"total number of scans during the MS run (from mz file)");
_p_writer->writeCell("Total scans");
_p_writer->setCellAnnotation(
"total number of MS level 1 during the MS run (from mz file)");
_p_writer->writeCell("Total MS1");
_p_writer->setCellAnnotation(
"total number of MS level 2 during the MS run (from mz file)");
_p_writer->writeCell("Total MS2");
_p_writer->setCellAnnotation(
"total number of MS level 3 during the MS run (from mz file)");
_p_writer->writeCell("Total MS3");
_p_writer->setCellAnnotation(
"total ion current in MS level 1 spectra "
"during the MS run (from mz file)");
_p_writer->writeCell("TIC MS1");
_p_writer->setCellAnnotation(
"total ion current in MS level 2 spectra "
"during the MS run (from mz file)");
_p_writer->writeCell("TIC MS2");
_p_writer->setCellAnnotation(
"total ion current in MS level 3 spectra "
"during the MS run (from mz file)");
_p_writer->writeCell("TIC MS3");
}
/*
total_peptide_used=3,///< total number of peptides generated and used in
identification total_proteins_used=4,///< total number of proteins generated
and used in identification
*/
}
void
QvaluesSheet::writeIdentificationDataSource(
IdentificationDataSource *p_ident_data_source)
{
_p_writer->writeLine();
MsRunSp msrun_sp = p_ident_data_source->getMsRunSp();
if(_msrun_statistics)
{
if(msrun_sp->findMsRunFile())
{
msrun_sp->checkMsRunStatistics();
}
msrun_sp->freeMsRunReaderSp();
}
_p_writer->writeCell(msrun_sp.get()->getXmlId());
_p_writer->writeCell(msrun_sp.get()->getSampleName());
_p_writer->writeCell(msrun_sp.get()->getFileName());
_p_writer->writeCell(p_ident_data_source->getIdentificationEngineName());
_p_writer->writeCell(p_ident_data_source->getIdentificationEngineVersion());
_p_writer->writeCell(p_ident_data_source->getResourceName());
QStringList fasta_files;
for(FastaFileSp fasta_file : p_ident_data_source->getFastaFileList())
{
fasta_files << fasta_file.get()->getAbsoluteFilePath();
}
_p_writer->writeCell(fasta_files.join(" "));
QVariant var_sample = p_ident_data_source->getIdentificationEngineParam(
IdentificationEngineParam::tandem_param);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toString());
}
var_sample = p_ident_data_source->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_spectra_assigned);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
var_sample = p_ident_data_source->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_spectra_used);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
if(!p_ident_data_source
->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_spectra_assigned)
.isNull() &&
!p_ident_data_source
->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_spectra_used)
.isNull())
{
_p_writer->writeCellPercentage(
p_ident_data_source
->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_spectra_assigned)
.toDouble() /
p_ident_data_source
->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_spectra_used)
.toDouble());
}
else
{
_p_writer->writeEmptyCell();
}
var_sample = p_ident_data_source->getIdentificationEngineStatistics(
IdentificationEngineStatistics::total_unique_assigned);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
if(_msrun_statistics)
{
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::total_spectra);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::total_spectra_ms1);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::total_spectra_ms2);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::total_spectra_ms3);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toInt());
}
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::tic_spectra_ms1);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toDouble());
}
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::tic_spectra_ms2);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toDouble());
}
var_sample =
msrun_sp.get()->getMsRunStatistics(MsRunStatistics::tic_spectra_ms3);
if(var_sample.isNull())
{
_p_writer->writeEmptyCell();
}
else
{
_p_writer->writeCell(var_sample.toDouble());
}
}
}
/**
* \file /output/ods/qvaluessheet.h
* \date 16/09/2019
* \author Olivier Langella
* \brief ODS Q-values sheet
*/
/*******************************************************************************
* Copyright (c) 2019 Olivier Langella <olivier.langella@u-psud.fr>.
*
* This file is part of XTPcpp.
*
* XTPcpp is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* XTPcpp is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XTPcpp. If not, see <http://www.gnu.org/licenses/>.
*
******************************************************************************/
#pragma once
#include "../../core/project.h"
#include <odsstream/calcwriterinterface.h>
#include "odsexport.h"
class QvaluesSheet
{
public:
QvaluesSheet(OdsExport *p_ods_export,
CalcWriterInterface *p_writer,
ProjectSp p_project);
private:
void writeHeaders();
void
writeIdentificationDataSource(IdentificationDataSource *p_ident_data_source);
private:
OdsExport *_p_ods_export;
const Project *_p_project;
CalcWriterInterface *_p_writer;
bool _msrun_statistics = true;
};
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment