libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
psmcbor2json.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/processing/cbor/psm/psmcbor2json.cpp
3 * \date 19/07/2025
4 * \author Olivier Langella
5 * \brief convert CBOR PSM to JSON
6 */
7
8/*******************************************************************************
9 * Copyright (c) 2025 Olivier Langella <Olivier.Langella@universite-paris-saclay.fr>.
10 *
11 * This file is part of PAPPSOms-tools.
12 *
13 * PAPPSOms-tools is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation, either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * PAPPSOms-tools is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with PAPPSOms-tools. If not, see <http://www.gnu.org/licenses/>.
25 *
26 ******************************************************************************/
27
28
29#include "psmcbor2json.h"
30#include <QJsonDocument>
31#include <QJsonObject>
32#include <QJsonValue>
34
36{
37 mp_jsonOutput = json_output_p;
38
39 *mp_jsonOutput << "{" << Qt::endl;
40}
41
42
46
47void
53
54void
56 [[maybe_unused]])
57{
58 if(!m_targetFastaFiles.isEmpty())
59 {
60 mp_jsonOutput->appendKey("target_fasta_files");
62 }
63 if(!m_decoyFastaFiles.isEmpty())
64 {
65 mp_jsonOutput->appendKey("decoy_fasta_files");
67 }
68}
69
70void
72 [[maybe_unused]])
73{
74
75 mp_jsonOutput->appendKey("informations");
76 mp_jsonOutput->writeCborMap(m_cborInformations);
77}
78
79void
81{
82 mp_jsonOutput->appendKey("log");
83 mp_jsonOutput->writeCborArray(m_cborLog);
84}
85
86
87void
89 [[maybe_unused]])
90{
91 mp_jsonOutput->appendKey("parameter_map");
92 mp_jsonOutput->writeCborMap(m_cborParameterMap);
93}
94
95void
97 [[maybe_unused]])
98{
99
100 mp_jsonOutput->appendKey("sample_list");
101 mp_jsonOutput->startArray();
102}
103
104void
106 [[maybe_unused]])
107{
108
109 mp_jsonOutput->endArray();
110}
111
112void
114 [[maybe_unused]])
115{
116 mp_jsonOutput->appendKey("protein_map");
117 mp_jsonOutput->startMap();
118 if(!mpa_cborReader->enterContainer())
119 {
120 throw pappso::PappsoException(QObject::tr("enterContainer in protein map failed"));
121 }
122 QString accession;
123 while(!mpa_cborReader->lastError() && mpa_cborReader->hasNext())
124 {
125 mpa_cborReader->decodeString(accession);
126 mp_jsonOutput->appendKey(accession);
127
128 QCborMap cbor_protein;
129 mpa_cborReader->readCborMap(cbor_protein);
130 mp_jsonOutput->writeCborMap(cbor_protein);
131 }
132
133 mpa_cborReader->leaveContainer();
134 mp_jsonOutput->endMap();
135}
136
137void
139{
140
141 mp_jsonOutput->startMap();
142 mp_jsonOutput->appendKey("id");
143 mp_jsonOutput->writeCborMap(m_cborScanId);
144 mp_jsonOutput->appendKey("precursor");
145 mp_jsonOutput->writeCborMap(m_cborScanPrecursor);
146 mp_jsonOutput->appendKey("ms2");
147 mp_jsonOutput->writeCborMap(m_cborScanMs2);
148 if(!m_cborScanProps.isEmpty())
149 {
150 mp_jsonOutput->appendKey("props");
151 mp_jsonOutput->writeCborMap(m_cborScanProps);
152 };
153 mp_jsonOutput->appendKey("psm_list");
154 mp_jsonOutput->startArray();
155}
156
157void
159{
160 mp_jsonOutput->endArray(); // psm_list
161 mp_jsonOutput->endMap(); // scan
162}
163
164
165void
167{
168 //"name": "tandem2017_nopatch_20120906_balliau_extract_1_A01_urnb-1",
169 qDebug();
170 mp_jsonOutput->startMap(); // sample
171 mp_jsonOutput->appendKey("name");
173
174
175 mp_jsonOutput->appendKey("identification_file_list");
176 mp_jsonOutput->startArray();
177 for(auto &identification_file : m_currentIdentificationFileList)
178 {
179 mp_jsonOutput->startMap();
180 mp_jsonOutput->appendKey("name");
181 mp_jsonOutput->appendValue(identification_file.name);
182 mp_jsonOutput->endMap();
183 }
184 mp_jsonOutput->endArray();
185
186
187 mp_jsonOutput->appendKey("peaklist_file");
188 mp_jsonOutput->startMap();
189 mp_jsonOutput->appendKey("name");
190 mp_jsonOutput->appendValue(m_currentPeaklistFile.name);
191 mp_jsonOutput->endMap();
192
193 mp_jsonOutput->appendKey("scan_list");
194 mp_jsonOutput->startArray();
195}
196
197void
199 [[maybe_unused]])
200{
201 mp_jsonOutput->endArray(); // scan_list
202 mp_jsonOutput->endMap(); // sample
203}
204
205void
207{
208 mp_jsonOutput->startMap(); // psm
209 mp_jsonOutput->appendKey("proforma");
211 mp_jsonOutput->appendKey("protein_list");
212 mp_jsonOutput->startArray();
213 for(auto &protein_ref : m_currentPsmProteinRefList)
214 {
215 mp_jsonOutput->startMap();
216 mp_jsonOutput->appendKey("accession");
217 mp_jsonOutput->appendValue(protein_ref.accession);
218 mp_jsonOutput->appendKey("positions");
219 mp_jsonOutput->startArray();
220 for(auto position : protein_ref.positions)
221 {
222 mp_jsonOutput->appendValue(position);
223 }
224 mp_jsonOutput->endArray();
225 mp_jsonOutput->endMap();
226 }
227 mp_jsonOutput->endArray();
228 if(!m_cborScanPsmProps.isEmpty())
229 {
230 mp_jsonOutput->appendKey("props");
231 mp_jsonOutput->writeCborMap(m_cborScanPsmProps);
232 }
233 mp_jsonOutput->appendKey("eval");
234 mp_jsonOutput->writeCborMap(m_cborScanPsmEval);
235
236 mp_jsonOutput->endMap(); // psm
237}
helper class to write json text using CBOR data structures
void informationsReady(pappso::UiMonitorInterface &monitor) override
void scanFinished(pappso::UiMonitorInterface &monitor) override
void sampleStarted(pappso::UiMonitorInterface &monitor) override
void sampleFinished(pappso::UiMonitorInterface &monitor) override
void psmReady(pappso::UiMonitorInterface &monitor) override
pappso::cbor::JsonStreamWriter * mp_jsonOutput
void readProteinMap(pappso::UiMonitorInterface &monitor) override
void fastaFilesReady(pappso::UiMonitorInterface &monitor) override
void logReady(pappso::UiMonitorInterface &monitor) override
void sampleListStarted(pappso::UiMonitorInterface &monitor) override
void parameterMapReady(pappso::UiMonitorInterface &monitor) override
void close() override
convenient function to clean pointer before leaving
void sampleListFinished(pappso::UiMonitorInterface &monitor) override
void scanStarted(pappso::UiMonitorInterface &monitor) override
PsmCbor2Json(pappso::cbor::JsonStreamWriter *json_output_p)
std::vector< PsmProteinRef > m_currentPsmProteinRefList
std::vector< PsmFile > m_currentIdentificationFileList