54 readAlignmentMethodSp();
55 readQuantificationMethodSp();
61 readProjectParameters();
66 m_isMatchBetweenRun = msp_quantificationMethod.get()->getMatchBetweenRun();
71 param.
name =
"mcq_version";
73 m_projectParameters.setProjectParam(param);
75 m_projectParameters.merge(msp_alignmentMethod.get()->getProjectParameters());
76 m_projectParameters.merge(msp_quantificationMethod.get()->getProjectParameters());
82 QJsonObject methods = m_jsonDocument.object().value(
"masschroq_methods").toObject();
87 QJsonObject msrun_list = documentFind(
"identification_data",
"msrun_list").toObject();
89 QJsonObject protein_list = documentFind(
"identification_data",
"protein_list").toObject();
91 QJsonObject peptide_list = documentFind(
"identification_data",
"peptide_list").toObject();
93 QJsonObject msrunpeptide_list =
94 documentFind(
"identification_data",
"msrunpeptide_list").toObject();
100 read_msrun_peptide_observations();
102 QJsonObject actions = m_jsonDocument.object().value(
"actions").toObject();
105 readAction(cbor_output);
138 std::map<QString, QString> msfilepathlist;
139 const QJsonObject msrun_list(documentFind(
"identification_data",
"msrun_list").toObject());
140 auto it = msrun_list.begin();
141 while(it != msrun_list.end())
143 qDebug() << it.key();
144 qDebug() << it.value().toObject().value(
"file");
147 msfilepathlist.insert({it.key(), it.value().toObject().value(
"file").toString()});
154 mapFilenameList = [](
const std::pair<QString, QString> &mapit) {
159 std::vector<pappso::MsRunIdCstSPtr> msrunid_list = file_access.
getMsRunIds();
166 if(msrunid_list.size() == 0)
173 run_reader.get()->setMonoThread(
true);
175 run_reader.get()->releaseDevice();
176 run_reader.get()->setMonoThread(
false);
177 return std::make_shared<pappso::masschroq::MsRunPeptideList>(msrun);
182 m_uiMonitor.appendText(QObject::tr(
"reading %1 msruns").arg(msfilepathlist.size()));
186 std::map<QString, pappso::masschroq::MsRunPeptideListSp> *p_localPtrOnmsrunpeptidelist =
190 [local_monitor, p_localPtrOnmsrunpeptidelist](
192 local_monitor->
setStatus(QObject::tr(
"MS run '%1' from file %2: added ")
196 ->getMsRunReaderSPtr()
204 ->getMsRunReaderSPtr()
210 p_localPtrOnmsrunpeptidelist->insert({msrun.get()
213 ->getMsRunReaderSPtr()
222 QFuture<std::size_t> res = QtConcurrent::mappedReduced<std::size_t>(msfilepathlist.begin(),
223 msfilepathlist.end(),
226 QtConcurrent::OrderedReduce);
227 res.waitForFinished();
229 m_uiMonitor.appendText(
"reading msruns finished");
230 if(m_msfileList.begin()->second.get()->getMsRunSp().get()->hasTimsTofMobilityIndex())
232 m_uiMonitor.appendText(
"ion mobility grid enabled");
233 msp_ionMobilityGrid = std::make_shared<pappso::IonMobilityGrid>();
275 const QJsonObject protein_list(documentFind(
"identification_data",
"protein_list").toObject());
279 auto it = protein_list.begin();
280 while(it != protein_list.end())
282 qDebug() << it.key();
283 qDebug() << it.value().toObject().value(
"description");
289 p_protein = std::make_shared<pappso::masschroq::Protein>(
290 it.key(), it.value().toObject().value(
"description").toString());
295 QObject::tr(
"problem creating protein :\n%1").arg(it.key()));
298 m_proteinMap.insert({p_protein.get()->getId(), p_protein});
308 const QJsonObject peptide_list(documentFind(
"identification_data",
"peptide_list").toObject());
312 auto it = peptide_list.begin();
313 while(it != peptide_list.end())
315 qDebug() << it.key();
316 qDebug() << it.value().toObject().value(
"proforma");
323 std::vector<pappso::masschroq::ProteinSp> protein_list;
324 for(
auto prot_id : it.value().toObject().value(
"proteins").toArray())
326 auto it = m_proteinMap.find(prot_id.toString());
327 if(it != m_proteinMap.end())
329 protein_list.push_back(it->second);
334 QObject::tr(
"protein id %1 not found").arg(prot_id.toString()));
339 peptide_sp = std::make_shared<pappso::masschroq::Peptide>(
342 it.value().toObject().value(
"proforma").toString()),
344 m_peptideStore.push_back(peptide_sp);
345 peptide_sp.get()->setMods(it.value().toObject().value(
"mods").toString());
346 m_peptideMap.insert({peptide_sp.get()->getId(), peptide_sp});
349 QJsonObject json_label_list = it.value().toObject().value(
"label_list").toObject();
352 if(!json_label_list.isEmpty())
355 peptide_sp.get()->setJsonLabelList(json_label_list);
362 QObject::tr(
"problem creating protein :\n%1").arg(it.key()));
374 const QJsonObject msrunpeptide_list(
375 documentFind(
"identification_data",
"msrunpeptide_list").toObject());
376 auto it = msrunpeptide_list.begin();
377 while(it != msrunpeptide_list.end())
379 qDebug() << it.key();
380 QJsonObject jmsrun_peptidelist_object = it.value().toObject();
381 auto it_peptide_obs = jmsrun_peptidelist_object.find(
"peptide_obs");
382 if(it_peptide_obs == jmsrun_peptidelist_object.end())
385 QObject::tr(
"peptide_obs not found in msrunpeptide_list %1").arg(it.key()));
387 QJsonObject json_msrunobs = it_peptide_obs->toObject();
388 auto it_msrun = m_msfileList.find(it.key());
389 if(it_msrun == m_msfileList.end())
395 auto itpep = json_msrunobs.begin();
396 while(itpep != json_msrunobs.end())
398 qDebug() << itpep.key();
399 QJsonArray json_obs_list = itpep.value().toArray();
400 auto it_pepmap = m_peptideMap.find(itpep.key());
401 if(it_pepmap == m_peptideMap.end())
406 qDebug() <<
"json_obs_list.size()=" << json_obs_list.size();
407 for(
auto json_obs_value : json_obs_list)
409 QJsonObject observation = json_obs_value.toObject();
410 qint64 scan = observation.value(
"scan").toInteger();
411 qint64 index = observation.value(
"index").toInteger();
412 QString label = observation.value(
"label").toString();
413 std::uint8_t charge =
414 observation.value(
"precursor").toObject().value(
"charge").toInt();
420 p_label = peptide_sp.get()->getPeptideLabelPtr(label);
424 msrunpep_sp.get()->addPeptideSpectrumIndexObservation(
425 peptide_sp, p_label, index, charge);
430 msrunpep_sp.get()->addPeptideScanNumberObservation(
431 peptide_sp, p_label, scan, charge);
434 peptide_sp.get()->addObservedChargeState(charge);
435 peptide_sp.get()->addObservedInMsRunSp(msrunpep_sp.get()->getMsRunSp());
440 QObject::tr(
"error reading peptide %1 observation scan %2 "
450 if(msp_ionMobilityGrid.get() !=
nullptr)
452 if(peptide_sp.get() !=
nullptr)
454 peptide_sp.get()->populateIonMobilityGrid(msp_ionMobilityGrid.get());
470 if(ni_min_abundance > 0)
478 peptide_sp.get()->computeIsotopologues(ni_min_abundance);
482 QFuture<void> res = QtConcurrent::map<std::vector<pappso::masschroq::PeptideSp>::iterator>(
483 m_peptideStore.begin(), m_peptideStore.end(), mapComputeIsotopologues);
484 m_uiMonitor.appendText(QObject::tr(
"Computing isotopologues %1").arg(ni_min_abundance));
485 res.waitForFinished();
487 m_uiMonitor.appendText(
"Computing isotopologues OK");
495 const QJsonObject group_list(documentFind(
"actions",
"group_list").toObject());
497 auto it_group = group_list.begin();
498 while(it_group != group_list.end())
500 QString
id = it_group.key();
501 QJsonArray json_msrun_list = it_group.value().toArray();
502 std::vector<pappso::masschroq::MsRunPeptideListSp> msrun_list;
503 for(
auto json_msrun : json_msrun_list)
506 auto it_msrun = m_msfileList.find(json_msrun.toString());
507 if(it_msrun == m_msfileList.end())
510 QObject::tr(
"msrun %1 not found").arg(json_msrun.toString()));
512 msrun_list.push_back(it_msrun->second);
515 m_msRunGroupSpList.insert({id, std::make_shared<MsRunGroup>(
id, msrun_list)});
520 QJsonObject align_list;
523 align_list = documentFind(
"actions",
"align_group").toObject();
528 if(!align_list.isEmpty())
533 std::size_t count_q = 1;
534 QStringList group_keys = align_list.keys();
535 for(
auto group_id : group_keys)
537 auto itgroup = m_msRunGroupSpList.find(group_id);
538 if(itgroup == m_msRunGroupSpList.end())
545 align_list.value(group_id).toObject().value(
"alignment_reference").toString();
546 if(!ref_id.isEmpty())
548 itgroup->second.get()->setAlignmentMethodSp(msp_alignmentMethod, ref_id);
550 itgroup->second.get()->setIonMobilityGridSp(msp_ionMobilityGrid);
551 itgroup->second.get()->align(cbor_output, QString(
"a%1").arg(count_q), m_uiMonitor);
558 QVariant quantify_all;
561 quantify_all = documentFind(
"actions",
"quantify_all").toVariant();
566 if(!quantify_all.isNull())
568 if(quantify_all.toBool())
570 double ni_ratio = msp_quantificationMethod.get()->getIsotopeMinimumRatio();
571 computeIsotopologues(ni_ratio);
572 std::size_t count_q = 1;
575 for(
auto &pair_group : m_msRunGroupSpList)
577 pair_group.second.get()->setIonMobilityGridSp(msp_ionMobilityGrid);
578 pair_group.second.get()->quantify(cbor_output,
579 QString(
"q%1").arg(count_q),
582 msp_quantificationMethod,