32#include <odsstream/tsvreader.h>
33#include <odsstream/odsexception.h>
35#include <qcontainerfwd.h>
43#include "../../../../fasta/fastareader.h"
48 const QString &sage_json_file)
49 : m_sageFileReader(sage_file_reader)
63 return m_jsonAbsoluteFilePath;
81 const QString &sequence_in)
84 QStringList description_split = description_in.split(
" ", Qt::SkipEmptyParts);
85 QString accession = description_split.at(0);
86 if(description_split.length() > 0)
87 description_split.remove(0);
90 const PsmProtein &psm_protein = mp_self->m_psmProteinMap.getByAccession(accession);
91 psm_protein.
protein_sp.get()->setSequence(sequence_in);
92 psm_protein.
protein_sp.get()->setDescription(description_split.join(
" "));
99 QString rev_accession = accession.prepend(m_decoyTag);
100 const PsmProtein &psm_protein = mp_self->m_psmProteinMap.getByAccession(rev_accession);
101 psm_protein.
protein_sp.get()->setSequence(sequence_in);
104 psm_protein.
protein_sp.get()->setDescription(description_split.join(
" "));
115 return *mp_cborWriter;
123 extractMzmlPathList(m_sageFileReader.getJsonDocument());
125 QString file_str = getTsvFilePath(m_sageFileReader.getJsonDocument());
126 QFileInfo tsv_file_info(file_str);
130 TsvReader tsv_reader(handler);
132 QFile tsv_file(tsv_file_info.absoluteFilePath());
133 tsv_reader.parse(tsv_file);
136 catch(OdsException &error_ods)
139 .arg(tsv_file_info.absoluteFilePath())
140 .arg(error_ods.qwhat()));
145 QFile fastaFile(getFastaFilePath(m_sageFileReader.getJsonDocument()));
148 reader.
parse(fastaFile);
151 mp_cborWriter->append(
"protein_map");
152 m_psmProteinMap.writeMap(*mp_cborWriter);
155 mp_cborWriter->append(
"sample_list");
156 mp_cborWriter->startArray();
161 catch(OdsException &error_ods)
164 .arg(tsv_file_info.absoluteFilePath())
165 .arg(error_ods.qwhat()));
168 mp_cborWriter->endArray();
175 QJsonObject sage_object = json_doc.object();
176 QJsonValue json_mzml_path_list = sage_object.value(
"mzml_paths");
177 if(json_mzml_path_list.isUndefined())
181 m_mzmlPathList.clear();
183 for(
auto path_mzml : json_mzml_path_list.toArray())
185 m_mzmlPathList << convertToLocalFileOrDie(path_mzml.toString());
192 for(
auto &file_path : m_mzmlPathList)
194 if(file_path.endsWith(file_msrun))
198 QObject::tr(
"MS run %1 not found in Sage json document").append(file_msrun));
206 QJsonObject sage_object = json_doc.object();
207 QJsonValue output_path = sage_object.value(
"output_paths");
208 if(output_path.isUndefined())
213 if(!output_path.isArray())
217 for(
auto element : output_path.toArray())
219 if(element.isString())
221 if(element.toString().endsWith(
".tsv"))
223 path = element.toString();
228 return convertToLocalFileOrDie(path);
235 QJsonObject sage_object = json_doc.object();
236 QJsonValue database = sage_object.value(
"database");
237 if(database.isUndefined())
241 path = database.toObject().value(
"fasta").toString();
248 return convertToLocalFileOrDie(path);
257 if(path.startsWith(
"file:") || path.startsWith(
"http:") || path.startsWith(
"https:"))
260 if(tsv_url.isValid())
262 qDebug() <<
"tsv_url.isValid()";
263 if(tsv_url.isLocalFile())
265 qDebug() <<
"tsv_url.isLocalFile()";
266 return tsv_url.toLocalFile();
271 QObject::tr(
"Unable to load data from remote URL %1").arg(tsv_url.toString()));
278std::vector<pappso::cbor::psm::SageReader::SageModification>
281 std::vector<SageReader::SageModification> list;
282 QJsonObject sage_object = m_sageFileReader.getJsonDocument().object();
283 QJsonValue database = sage_object.value(
"database");
284 if(database.isUndefined())
289 QJsonValue static_mods = database.toObject().value(
"static_mods");
290 if(static_mods.isUndefined())
294 for(QString residue_str : static_mods.toObject().keys())
297 modif.
residue = residue_str.at(0);
300 static_mods.toObject().value(residue_str).toDouble());
302 QString::number(static_mods.toObject().value(residue_str).toDouble(),
'f', 6);
315 list.push_back(modif);
320std::vector<pappso::cbor::psm::SageReader::SageModification>
323 std::vector<SageReader::SageModification> list;
324 QJsonObject sage_object = m_sageFileReader.getJsonDocument().object();
325 QJsonValue database = sage_object.value(
"database");
326 if(database.isUndefined())
331 QJsonValue var_mods = database.toObject().value(
"variable_mods");
332 if(var_mods.isUndefined())
336 for(QString residue_str : var_mods.toObject().keys())
339 modif.
residue = residue_str.at(0);
340 for(QJsonValue one_mass : var_mods.toObject().value(residue_str).toArray())
357 list.push_back(modif);
367 QJsonObject sage_object = m_sageFileReader.getJsonDocument().object();
368 QJsonValue database = sage_object.value(
"database");
369 if(database.isUndefined())
373 path = database.toObject().value(
"decoy_tag").toString();
384 return m_sageFileReader;
pappso_double getMass() const
void parse(QFile &fastaFile)
static AaModificationP guessAaModificationPbyMonoisotopicMassDelta(Enums::AminoAcidChar aa, pappso_double mass)
overrides QCborStreamWriter base class to provide convenient functions
void setSequence(const QString &description_in, const QString &sequence_in) override
FastaSeq(SageReader *self)
const QString & getMzmlPath(const QString &file_msrun) const
SageReader(pappso::UiMonitorInterface *p_monitor, pappso::cbor::CborStreamWriter *p_output, const SageFileReader &sage_file_reader, const QString &sage_json_file)
std::vector< SageModification > getStaticModificationList() const
pappso::cbor::CborStreamWriter * mp_cborWriter
const QString & getmJsonAbsoluteFilePath() const
void extractMzmlPathList(const QJsonDocument &json_doc)
pappso::cbor::CborStreamWriter & getCborStreamWriter() const
QString m_jsonAbsoluteFilePath
std::vector< SageModification > getVariableModificationList() const
QString getFastaFilePath(const QJsonDocument &json_doc)
QString getDecoyTag() const
const SageFileReader & getSageFileReader() const
QString getTsvFilePath(const QJsonDocument &json_doc)
pappso::UiMonitorInterface * mp_monitor
QString convertToLocalFileOrDie(const QString &file_str) const
std::shared_ptr< Protein > protein_sp
pappso::AaModificationP modification