Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
* \file /files/tandemparametersfile.cpp
* \date 19/9/2017
* \author Olivier Langella
* \brief handles X!Tandem parameters file (presets)
*/
/*******************************************************************************
* Copyright (c) 2017 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/>.
*
* Contributors:
* Olivier Langella <olivier.langella@u-psud.fr> - initial API and implementation
******************************************************************************/
#include "tandemparametersfile.h"
#include <QXmlSimpleReader>
#include <QXmlStreamWriter>
#include <pappsomspp/pappsoexception.h>
#include "../input/xtandemparamsaxhandler.h"
TandemParametersFile::TandemParametersFile(const QString & fasta_source) : _param_source(fasta_source)
{
qDebug() << "TandemParametersFile::TandemParametersFile "<< fasta_source;
}
TandemParametersFile::TandemParametersFile(const QFileInfo & fasta_source): _param_source(fasta_source)
{
}
TandemParametersFile::TandemParametersFile(const TandemParametersFile & other) : _param_source(other._param_source)
{
}
TandemParametersFile::~TandemParametersFile()
{
}
const QString TandemParametersFile::getMethodName() const {
return _param_source.baseName();
}
const QString TandemParametersFile::getFilename() const {
return _param_source.fileName();
}
const QString TandemParametersFile::getAbsoluteFilePath() const {
return _param_source.absoluteFilePath();
}
void TandemParametersFile::setTandemParameters(const TandemParameters & parameters) const {
QFile xml_file(_param_source.absoluteFilePath());
QXmlStreamWriter * p_out;
if (xml_file.open(QIODevice::WriteOnly)) {
p_out = new QXmlStreamWriter();
p_out->setDevice(&xml_file);
writeXmlParametersFile(p_out, parameters);
xml_file.close();
delete p_out;
} else
{
throw pappso::PappsoException(QObject::tr("error : cannot open the XML X!Tandem parameter file : %1\n").arg(xml_file.fileName()));
}
}
TandemParameters TandemParametersFile::getTandemParameters() const {
qDebug() << "TandemParametersFile::getTandemParameters begin";
TandemParameters parameters;
XtandemParamSaxHandler * parser = new XtandemParamSaxHandler(¶meters);
QXmlSimpleReader simplereader;
simplereader.setContentHandler(parser);
simplereader.setErrorHandler(parser);
qDebug() << "TandemParametersFile::getTandemParameters '" << _param_source.absoluteFilePath() << "'";
parameters.setMethodName(getMethodName());
QFile qfile(_param_source.absoluteFilePath());
QXmlInputSource xmlInputSource(&qfile);
if (simplereader.parse(xmlInputSource)) {
qfile.close();
} else {
qfile.close();
delete parser;
throw pappso::PappsoException(QObject::tr("Error reading %1 X!Tandem preset file :\n %2").arg(_param_source.absoluteFilePath()).arg(parser->errorString()));
}
delete parser;
return parameters;
}
void TandemParametersFile::writeXmlParametersFile (QXmlStreamWriter * p_out, const TandemParameters & parameters) const {
p_out->setAutoFormatting(true);
p_out->writeStartDocument("1.0");
//<?xml version="1.0" encoding="UTF-8"?>
//<bioml label="example api document">
//<note type="input" label="spectrum, parent monoisotopic mass error units">ppm</note>
//<note type="input" label="spectrum, parent monoisotopic mass error minus">10</note>
p_out->writeStartElement("bioml");
p_out->writeAttribute("label","example api document");
for (const QString & label :parameters.getMapLabelValue().keys()) {
p_out->writeStartElement("note");
p_out->writeAttribute("type","input");
p_out->writeAttribute("label",label);
p_out->writeCharacters(parameters.getMapLabelValue().value(label));
p_out->writeEndElement();
}
//</bioml>
p_out->writeEndElement();
p_out->writeEndDocument();
}