libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
projectparameters.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/processing/project/projectparameters.cpp
3 * \date 16/03/2024
4 * \author Olivier Langella
5 * \brief simple structure to store project parameters (identification,
6 * filtering, quantification)
7 */
8
9/*******************************************************************************
10 * Copyright (c) 2022 Olivier Langella
11 *<Olivier.Langella@universite-paris-saclay.fr>.
12 *
13 * This file is part of i2MassChroQ.
14 *
15 * i2MassChroQ is free software: you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation, either version 3 of the License, or
18 * (at your option) any later version.
19 *
20 * i2MassChroQ is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with i2MassChroQ. If not, see <http://www.gnu.org/licenses/>.
27 *
28 ******************************************************************************/
29
30#include "projectparameters.h"
31#include <QDateTime>
32#include <QUrl>
34#include <QDebug>
35#include <QJsonValue>
36
37
41
42pappso::ProjectParameters::ProjectParameters(const QJsonObject &json_parameters)
43{
44
45 qDebug() << json_parameters.keys();
46 pappso::ProjectParam project_parameter;
47 auto itparam = json_parameters.begin();
48 while(itparam != json_parameters.end())
49 {
50 qDebug() << itparam.key();
51 project_parameter.name = itparam.key();
52 project_parameter.category =
53 (pappso::ProjectParamCategory)itparam.value().toObject().value("category").toInt();
54 project_parameter.value = itparam.value().toObject().value("value").toVariant();
55
56 setProjectParam(project_parameter);
57 itparam++;
58 }
59}
60
61
70
74
87
88
89void
90pappso::ProjectParameters::writeCellVariant(CalcWriterInterface &writer, const QVariant &var) const
91{
92 int type = var.metaType().id();
93 switch(type)
94 {
95 case QMetaType::Void:
96 writer.writeEmptyCell();
97 break;
98 case QMetaType::Bool:
99 writer.writeCell(var.toBool());
100 break;
101 case QMetaType::Double:
102 case QMetaType::Float:
103 writer.writeCell(var.toDouble());
104 break;
105 case QMetaType::Int:
106 writer.writeCell(var.toInt());
107 break;
108 case QMetaType::QDate:
109 writer.writeCell(var.toDate());
110 break;
111 case QMetaType::QDateTime:
112 writer.writeCell(var.toDateTime());
113 break;
114 case QMetaType::QString:
115 writer.writeCell(var.toString());
116 break;
117 case QMetaType::QUrl:
118 writer.writeCell(var.toUrl(), var.toUrl().toString());
119 break;
120 default:
121 writer.writeCell(var.toString());
122 }
123}
124
125void
127 const ProjectParam &param) const
128{
129
130 writer.writeStartElement("project_param");
131 writer.writeAttribute("category", QString("%1").arg((std::uint8_t)param.category));
132 writer.writeAttribute("name", param.name);
133 writeXmlVariant(writer, param.value);
134 writer.writeEndElement();
135}
136
137
138void
139pappso::ProjectParameters::writeParameters(QXmlStreamWriter &xml_writer) const
140{
141
142 for(auto param_entry : m_mapGeneralParameters)
143 {
144 writeXmlParameter(xml_writer, param_entry.second);
145 }
146
147 for(auto param_entry : m_mapInstrumentParameters)
148 {
149 writeXmlParameter(xml_writer, param_entry.second);
150 }
151 for(auto param_entry : m_mapIdentificationParameters)
152 {
153 writeXmlParameter(xml_writer, param_entry.second);
154 }
155
156 for(auto param_entry : m_mapFilterParameters)
157 {
158 writeXmlParameter(xml_writer, param_entry.second);
159 }
160 for(auto param_entry : m_mapQuantificationParameters)
161 {
162 writeXmlParameter(xml_writer, param_entry.second);
163 }
164}
165
166void
167pappso::ProjectParameters::writeXmlVariant(QXmlStreamWriter &writer, const QVariant &var) const
168{
169 int type = var.metaType().id();
170 QString value;
171 switch(type)
172 {
173 case QMetaType::Void:
174 value = "";
175 break;
176 case QMetaType::Bool:
177 value = "false";
178 if(var.toBool())
179 value = "true";
180 break;
181 case QMetaType::Double:
182 case QMetaType::Float:
183 value = QString::number(var.toDouble(), 'g', 10);
184 break;
185 case QMetaType::Int:
186 value = QString::number(var.toInt());
187 break;
188 case QMetaType::QDate:
189 value = var.toDate().toString(Qt::ISODate);
190 break;
191 case QMetaType::QDateTime:
192 value = var.toDateTime().toString(Qt::ISODate);
193 break;
194 case QMetaType::QString:
195 value = var.toString();
196 break;
197 case QMetaType::QUrl:
198 value = var.toUrl().toString();
199 break;
200 default:
201 value = var.toString();
202 }
203
204 writer.writeAttribute("value", value);
205}
206
207void
208pappso::ProjectParameters::writeParameters(CalcWriterInterface &writer) const
209{
210 writer.writeSheet("Project parameters");
211
212 for(auto param_entry : m_mapGeneralParameters)
213 {
214 writer.writeCell(param_entry.second.name);
215 writeCellVariant(writer, param_entry.second.value);
216 writer.writeLine();
217 }
218
219 for(auto param_entry : m_mapInstrumentParameters)
220 {
221 writer.writeCell(param_entry.second.name);
222 writeCellVariant(writer, param_entry.second.value);
223 writer.writeLine();
224 }
225 for(auto param_entry : m_mapIdentificationParameters)
226 {
227 writer.writeCell(param_entry.second.name);
228 writeCellVariant(writer, param_entry.second.value);
229 writer.writeLine();
230 }
231 for(auto param_entry : m_mapFilterParameters)
232 {
233 writer.writeCell(param_entry.second.name);
234 writeCellVariant(writer, param_entry.second.value);
235 writer.writeLine();
236 }
237 for(auto param_entry : m_mapQuantificationParameters)
238 {
239 writer.writeCell(param_entry.second.name);
240 writeCellVariant(writer, param_entry.second.value);
241 writer.writeLine();
242 }
243}
244
245void
247{
248 switch(param.category)
249 {
251 m_mapGeneralParameters[param.name] = param;
252 break;
254 m_mapInstrumentParameters[param.name] = param;
255 break;
257 m_mapFilterParameters[param.name] = param;
258 break;
260 m_mapIdentificationParameters[param.name] = param;
261 break;
263 m_mapQuantificationParameters[param.name] = param;
264 break;
265 default:
266 break;
267 }
268}
269
270void
272{
273
274 for(auto key_value : parameters.m_mapGeneralParameters)
275 {
276 m_mapGeneralParameters[key_value.first] = key_value.second;
277 }
278 for(auto key_value : parameters.m_mapInstrumentParameters)
279 {
280 m_mapInstrumentParameters[key_value.first] = key_value.second;
281 }
282 for(auto key_value : parameters.m_mapFilterParameters)
283 {
284 m_mapFilterParameters[key_value.first] = key_value.second;
285 }
286
287 for(auto key_value : parameters.m_mapIdentificationParameters)
288 {
289 m_mapIdentificationParameters[key_value.first] = key_value.second;
290 }
291
292 for(auto key_value : parameters.m_mapQuantificationParameters)
293 {
294 m_mapQuantificationParameters[key_value.first] = key_value.second;
295 }
296}
297
298std::size_t
305
306const QVariant
308{
309 const std::map<QString, ProjectParam> *map_pointer = nullptr;
310 switch(category)
311 {
313 map_pointer = &m_mapGeneralParameters;
314 break;
316 map_pointer = &m_mapInstrumentParameters;
317 break;
319 map_pointer = &m_mapFilterParameters;
320 break;
322 map_pointer = &m_mapIdentificationParameters;
323 break;
325 map_pointer = &m_mapQuantificationParameters;
326 break;
327 default:
328 map_pointer = &m_mapGeneralParameters;
329 break;
330 }
331
332 auto it = map_pointer->find(name);
333 if(it != map_pointer->end())
334 {
335 return (it->second.value);
336 }
337 else
338 {
339 qDebug() << QObject::tr("project parameter named %1 in category %2 not found")
340 .arg(name)
341 .arg((std::int8_t)category);
342 }
343 return (QVariant());
344}
345
346std::vector<pappso::ProjectParam>
348{
349 std::vector<ProjectParam> param_list;
350 const std::map<QString, ProjectParam> *map_pointer = nullptr;
351 switch(category)
352 {
354 map_pointer = &m_mapGeneralParameters;
355 break;
357 map_pointer = &m_mapInstrumentParameters;
358 break;
360 map_pointer = &m_mapFilterParameters;
361 break;
363 map_pointer = &m_mapIdentificationParameters;
364 break;
366 map_pointer = &m_mapQuantificationParameters;
367 break;
368 default:
369 map_pointer = &m_mapGeneralParameters;
370 break;
371 }
372
373 for(auto pair_item : *map_pointer)
374 {
375 param_list.push_back(pair_item.second);
376 }
377
378 return param_list;
379}
380
381QJsonObject
383{
384 QJsonObject parameters;
385
386 for(auto param_entry : m_mapGeneralParameters)
387 {
388 parameters.insert(param_entry.first, param_entry.second.toJsonObject());
389 }
390 for(auto param_entry : m_mapInstrumentParameters)
391 {
392 parameters.insert(param_entry.first, param_entry.second.toJsonObject());
393 }
394 for(auto param_entry : m_mapIdentificationParameters)
395 {
396 parameters.insert(param_entry.first, param_entry.second.toJsonObject());
397 }
398 for(auto param_entry : m_mapFilterParameters)
399 {
400 parameters.insert(param_entry.first, param_entry.second.toJsonObject());
401 }
402 for(auto param_entry : m_mapQuantificationParameters)
403 {
404 parameters.insert(param_entry.first, param_entry.second.toJsonObject());
405 }
406 return parameters;
407}
408
409
410QJsonObject
412{
413
414 QJsonObject param;
415 param.insert("category", (int)category);
416
417 int type = value.metaType().id();
418 switch(type)
419 {
420 case QMetaType::Void:
421 param.insert("value", "");
422 break;
423 case QMetaType::Bool:
424 param.insert("value", value.toBool());
425 break;
426 case QMetaType::Double:
427 case QMetaType::Float:
428 param.insert("value", value.toDouble());
429 break;
430 case QMetaType::Int:
431 param.insert("value", value.toInt());
432 break;
433 case QMetaType::QDate:
434
435 param.insert("value", value.toDate().toString(Qt::ISODate));
436 break;
437 case QMetaType::QDateTime:
438
439 param.insert("value", value.toDateTime().toString(Qt::ISODate));
440 break;
441 case QMetaType::QString:
442 param.insert("value", value.toString());
443 break;
444 case QMetaType::QUrl:
445
446 param.insert("value", value.toString());
447 break;
448 default:
449 param.insert("value", value.toString());
450 }
451 return param;
452}
453
454void
455pappso::ProjectParameters::writeParameters(QCborStreamWriter &cbor_writer) const
456{
457 cbor_writer.append("project_parameters");
458
459 QCborValue::fromJsonValue(toJsonObject()).toCbor(cbor_writer);
460}
void writeCellVariant(CalcWriterInterface &writer, const QVariant &var) const
std::map< QString, ProjectParam > m_mapQuantificationParameters
std::map< QString, ProjectParam > m_mapIdentificationParameters
ProjectParameters & operator=(const ProjectParameters &other)
std::map< QString, ProjectParam > m_mapGeneralParameters
void writeXmlVariant(QXmlStreamWriter &writer, const QVariant &var) const
void writeXmlParameter(QXmlStreamWriter &writer, const ProjectParam &param) const
std::map< QString, ProjectParam > m_mapFilterParameters
void setProjectParam(const ProjectParam &param)
std::map< QString, ProjectParam > m_mapInstrumentParameters
QJsonObject toJsonObject() const
std::vector< ProjectParam > getProjectParamListByCategory(ProjectParamCategory category) const
const QVariant getValue(ProjectParamCategory category, const QString &name) const
void merge(const ProjectParameters &parameters)
void writeParameters(CalcWriterInterface &writer) const
@ identification
concerning identification
@ instrument
information about instrument
@ general
concerning the whole process
@ filter
concerning filters (psm, peptide, protein validation)
ProjectParamCategory category
QJsonObject toJsonObject() const